1

我一直抨擊我的頭靠在牆上一段時間了,現在仍然沒有設法解決這個問題。UITextField不辭職鍵盤

我有一個modalViewController上有一個UITextField(我們稱之爲myTroubleMaker)和其他一些非重要的組件。當我加載modalVC時,我初始化UITextField,並讓它立刻成爲第一個響應者,同時我將它的代理設置爲modalVC(self)。 modalView加載很好,重點放在UITextField和鍵盤上。 但是當我觸摸/點擊屏幕上的任何其他位置時,它並不會關閉鍵盤。它確實將焦點從UITextField中切換出來並放棄firstResponder,但鍵盤並未解散。

什麼是造成這個麻煩的問題?我該如何解決這個問題?

代碼:

.H

@interface myModalViewController : UIViewController <UItextFieldDelegate> 
{ 
    UITextField *myTroubleMaker; 
} 

@property (nonatomic, retain) UITextField *myTroubleMaker; 

@end 

.M

//I synthesized it properly 
-(void)loadView 
{ 
    [super loadView]; 

    self.myTroubleMaker = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 300, 50)]; 
    self.myTroubleMaker.backgroundColor = [UIColor clearColor]; 
    self.myTroubleMaker.textColor = [UIColor whiteColor]; 
    self.myTroubleMaker.text = @""; 
    self.myTroubleMaker.font = [UIFont systemFontOfSize:self.myTroubleMaker.frame.size.height - 8]; 
    self.myTroubleMaker.adjustsFontSizeToFitWidth = YES; 
    self.myTroubleMaker.minimumFontSize = 0.0; 
    self.myTroubleMaker.textAlignment = UITextAlignmentCenter; 
    self.myTroubleMaker.autocorrectionType = UITextAutocorrectionTypeNo; 
    self.myTroubleMaker.delegate = self; 
    self.myTroubleMaker.placeholder = @"I eat ur brainz, yoh!"; 
    self.myTroubleMaker.keyboardType = UIKeyboardTypeDefault; 
    self.myTroubleMaker.returnKeyType = UIReturnKeyDone; 
    [self.view addSubview:self.tabNameInputField]; 
    [self.myTroubleMaker becomeFirstResponder]; 
} 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    self.tabNameInputField.text = @""; 
    return YES; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 

    if ([touch view] == someOtherModalVCComponent) { 
     //do stuff 

     if([self.tabNameInputField isFirstResponder]) 
     { 
      [self.tabNameInputField resignFirstResponder]; 
     } 

     [self loadGraphics]; 
    } 

    if ([touch view] != self.myTroubleMaker) 
    { 
     if([self.myTroubleMaker isFirstResponder]) 
     { 
      [self.myTroubleMaker resignFirstResponder]; 
     } 
    } 
} 

它的所有工作,我想,除了用鍵盤此mindnumbing問題的方式。 即使我寫這個問題,我檢查了可能的解決方案類似的問題。

任何幫助,將不勝感激。我在這裏頭痛......


由我在下面接受的解決方案解決。

對於將來的參考,我使用devforums.apple.com/message/425914來獲得我的具體解決方案。由於我使用navigationController傳遞了modalVC,因此我需要在UINavigationController上創建一個類別並將其添加到它,以便它支持自動解除鍵盤。

回答

4

您可能正在使用UIModalPresentationFormSheet。 如果是,那麼這是iPad上的一項功能,鍵盤不會被解僱。

在iOS4上有一個新方法disablesAutomaticKeyboardDismissal:,如果您重寫它以擺脫默認行爲,可能會對您有所幫助。

http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/disablesAutomaticKeyboardDismissal

+0

這正是發生在我身上的事情。好工作! 對於將來的參考,我使用https://devforums.apple.com/message/425914來獲得我的具體解決方案。由於我使用navigationController傳遞了modalVC,因此我需要在UINavigationController上創建一個類別並將其添加到它,以便它支持自動解除鍵盤。 再次感謝。 –

0

一個選項是實現一個自定義UIButton並將其發送到您的根視圖的背面。在按鈕的點擊,辭去你的第一響應者。

有更多的解決方案,像其他答案一樣。