2012-04-30 233 views
39

我有幾個文本輸入,每當我觸摸背景時我都可以隱藏鍵盤,但只有當我輸入第一個文本框名稱textField1時纔會隱藏鍵盤。現在這個代碼應該很簡單,但我似乎無法得到它,我做錯了什麼?隱藏鍵盤ios

-(IBAction)backgroundTouched:(id)sender { 
[textField1 resignFirstResponder]; 
[buildLength resignFirstResponder]; 
[buildWidth resignFirstResponder]; 
[ridgeWidth resignFirstResponder]; 
[rafterWidth resignFirstResponder]; 
[hipWidth resignFirstResponder]; 
[eaveOverhang resignFirstResponder]; 
[spacing resignFirstResponder]; 

}

+0

什麼對象正在接受'backgroundTouched:'行動?這是觀點嗎?你把一切東西放在背後?在iOS上隱藏鍵盤的方式是覆蓋ViewController的'touchesEnded:withEvent:'。它在沒有其他對象能夠處理觸摸事件時被調用。在那裏我辭去了第一個響應者,但是你需要檢查'isFirstResponder',因爲如果你沒有使用觸摸,你應該調用super。 – Russ

+0

同意@Ru​​ss ...視圖控制器上的觸摸事件是更簡單的方法。但是如果它適用於textField1,它仍然很神祕。爲什麼不是其他人?我的猜測是其他句柄不好(例如'buildLength'未正確初始化)。 – danh

回答

2

你可以試試UITouch方法,並在此設置你的文本字段對象,並調用resignFirstResponder 當過你的屏幕上的鍵盤將辭職對碰,我希望這會爲你工作。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [currentSelectedTextField resignFirstResponder]; 
} 
186

如果要隱藏鍵盤,當你點擊一個按鈕,你在你view不止一個UITextFields,那麼你應該使用:

[self.view endEditing:YES]; 

點擊任意位置上來看,和鍵盤將消失。

+0

我注意到,在某些情況下,此方法在延遲約0.3秒後才起作用。我的意思是,resignFirstResponder立即刪除鍵盤。但是這個方法不行,你應該在使用this之後延遲使用performSelector。 – wzbozon

6

您也可以通過意見陣列(比如你的UIView的子視圖)迭代和手動辭職的鍵盤,如果你不想辭職對你父母的UIView內的所有子視圖這是件好事。

- (void)viewDidLoad 
{ 
    self.view.userInteractionEnabled = TRUE; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    //Iterate through your subviews, or some other custom array of views 
    for (UIView *view in self.view.subviews) 
     [view resignFirstResponder]; 
} 
27

試試這個:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[self view] endEditing:YES]; 
}