2012-06-29 57 views
0

在我的應用程序中,我有一個視圖,這是一個有很多輸入的表單。 當UITextField調用textFieldDidBeginEditing時,它會檢查標記,並根據輸入的意圖調出UIPopoverController或鍵盤。iOS iPad應用程序不隱藏鍵盤

如果鍵盤彈起來了,當用戶按下一個可以彈出彈出窗口的文本框時,我需要它消失。然而,我不能讓它消失,我已經盡一切辦法擺脫鍵盤,但它只是停留在那裏。我曾嘗試:

  • 調用resignFirstRespondertextFieldDidEndEditing
  • 調用[self.view endEditing:YES]textFieldDidEndEditing
  • 調用textFieldDidBeginEditingresignFirstResponder[self.view endEditing:YES]檢查以前的標籤等於鍵盤輸入文本字段。

任何想法都會很棒。

如果有人想看到確切的行爲,我已經把它翻譯出來並放在一個示例項目中。 http://dl.dropbox.com/u/61692457/KB_Test.zip

+0

可能重複[iPad的鍵盤,如果模態視圖控制器的演講風格是UIModalPresentationFormSheet不會解僱(http://stackoverflow.com/questions/ 3372333/ipad-keyboard-will-not-dismiss-if-modal-view-controller-presentation-style-is-ui) –

回答

2

在.h文件中

的UITextField * txtfld聲明一個全局的UITextField;

更換你的方法textFieldDidBeginEditing與textFieldShouldBeginEditing現在寫這個代碼的

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 

if (textField.tag == 1 || textField.tag==3) 
{ 

    if(numPickerPopover == nil) 
    { 

     numPicker = [[[NumPicker alloc] initWithStyle:UITableViewStylePlain] autorelease]; 

     numPicker.delegate = self; 

     numPickerPopover = [[UIPopoverController alloc] initWithContentViewController:numPicker]; 
     [numPickerPopover setPopoverContentSize:CGSizeMake(60.0, 260.0f)]; 
    } 

    [numPickerPopover presentPopoverFromRect:textField.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

    [txtfld resignFirstResponder]; 
    return NO; 
} 


if (textField.tag == 2) 

{ 

    txtfld = textField; 

    return YES; 
} 

return YES;  

} 
+0

謝謝你。我接受了這個想法並簡化了它,並且它是一種享受。不知道爲什麼我的方式不工作... – GrantC

0

要關閉鍵盤時,用戶觸摸提出來的文本字段,添加這個方法:

- (IBAction)dismissKeyboard:(id)sender { 

    [textField resignFirstResponder]; 
} 

在Interface Builder中,這種方法連接到你想要的文本框的事件,如觸摸的內心(或者更合適的)。

+0

當用戶觸摸另一個UITextField(不是相同的文本字段)時,我想讓鍵盤消失。無論如何,我還是給了它一個鏡頭,但我沒有使用界面生成器,我補充道:'[tf3 addTarget:self action:@selector(dismissKeyboard)forControlEvents:UIControlEventTouchUpInside];)'但是沒有激發事件。 – GrantC

+0

如果您希望在觸碰另一個TextField時將其解除,應該更容易,因爲您可以將該文本字段鏈接到解除IB中鍵盤的方法。我不確定非IB方式如何將「Touch Up Inside」事件與方法聯繫起來。 嘗試NSLog以確保事件被觸發,也許它是但鍵盤不被解僱。 – anuragbh

+0

那就是我用UITextFieldDelegate和textFieldDidBeginEditing和textFieldDidEndEditing所做的。但它沒有工作....... – GrantC