2012-04-07 148 views
2

而不是顯示鍵盤我想顯示彈出視圖時,選擇了textField(我的代碼是在底部)。如果鍵盤沒有顯示,那麼一切正常。但是,如果鍵盤正在顯示,然後選擇了文本框,則鍵盤不會被解除,某些地方firstResponders必須丟失,但我不知道在哪裏。有沒有人有解決這個問題?鍵盤沒有響應resignFirstResponder

我的文本框:

self.startDateTextField = [[UITextField alloc] initWithFrame:CGRectMake(79, 148, 138, 27)]; 
[self.startDateTextField setBorderStyle:UITextBorderStyleRoundedRect]; 
[self.startDateTextField setDelegate:delegate]; 
[self.startDateTextField addTarget:delegate action:@selector(editStartDate:) forControlEvents:UIControlEventEditingDidBegin]; 
[popoverWrapper addSubview:self.startDateTextField]; 

editStartDate:我:

-(void)editStartDate:(UITextField *)textField { 

[textField resignFirstResponder]; 

DatePickerVC *datePickerVC = [[DatePickerVC alloc] init]; 
datePickerVC.delegate = self; 

self.popoverController = [[UIPopoverController alloc] initWithContentViewController:datePickerVC]; 
[self.popoverController setDelegate:self]; 

[self.popoverController presentPopoverFromRect:CGRectMake(0, 0, 5, 5) inView:textField permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES]; 
} 

回答

8

這是很容易做到的,用你的UITextFieldDelegate方法特別UITextFieldShouldBeginEditing並返回NO並執行代碼以顯示酥料餅代替。這樣鍵盤從不顯示開始。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    [self.view endEditing:YES]; // added this in for case when keyboard was already on screen 
    [self editStartDate:textField]; 
    return NO; 
} 

爲它工作,確保您設置文本框的自我(視圖控制器),並在您的editStartDate方法委託刪除resignFirstResponder電話。

+1

這很好。謝謝。我不能獎賞賞金直到明天,但那麼它的全部是你的 – 2012-04-09 23:00:15

+0

拯救我的日子:) – Xeieshan 2014-04-24 11:26:18

0

嘗試像這樣在你的editStartDate:方法編輯

[self.startDateTextField resignFirstResponder]; 

:但 而不是做辭職鍵盤時當你在textfield中單擊時,你可以使用setInputView for Textfield來展現popViewController。

DatePickerVC *datePickerVC = [[DatePickerVC alloc] init]; 
datePickerVC.delegate = self; 

self.popoverController = [[UIPopoverController alloc] initWithContentViewController:datePickerVC]; 
[self.popoverController setDelegate:self]; 

[self.popoverController presentPopoverFromRect:CGRectMake(0, 0, 5, 5) inView:textField permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES]; 

self.startDateTextField = [[UITextField alloc] initWithFrame:CGRectMake(79, 148, 138, 27)]; 
[self.startDateTextField setBorderStyle:UITextBorderStyleRoundedRect]; 
[self.startDateTextField setDelegate:delegate]; 
self.startDateTextField.inputView = self.popoverController; 
+0

謝謝您的回答,但顯示酥料餅是不是在那裏我遇到了問題。我不能讓鍵盤消失。我可能會誤解一些東西,但我仍然無法取消鍵盤 – 2012-04-07 18:05:21

0

因此,你想在文本字段被選中並顯示其他內容後立即隱藏鍵盤?

有兩件事我能想到的:

  1. 給文本字段一段時間辭去第一響應之前得到它一起: [textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.5];

  2. 設置文本字段的inputView財產以零背景或清晰的背景色爲UIView

-1

如果inputView文本字段沒有得到你想要的東西,你也可以簡單地把一個看不見的按鈕上UITextField的頂部,只顯示從按鈕的動作酥料餅。對用戶來說,它將顯示爲文本字段帶來了彈出窗口。如果此時鍵盤仍然存在,請在所有可能的第一響應者(文本字段等)上致電resignFirstResponder

1

您似乎正在辭職文本字段的第一個響應者;然而,這不一定是第一響應者,這可以解釋爲什麼稱呼它沒有效果。

相反,你應該使用endEditing類別通過視圖的所有兒童改乘辭職第一響應者從哪個查看它連接到:

[self.view endEditing:YES]; 

在任何情況下,因爲你永遠不希望顯示鍵盤,你可以簡單地實現UITextFieldDelegate覆蓋默認行爲。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    // Your popover code. 

    return NO; 
} 

UITextFieldDelegate Protocol Reference.