1

私はしばらく壁に頭を打ちつけてきましたが、まだ私はこの問題を解決できませんでした。UITextFieldが辞任していないキーボード

私はUITextField(それをmyTroubleMakerと呼ぶ)といくつかの他の重要でないコンポーネントを持つmodalViewControllerを持っています。 modalVCをロードすると、UITextFieldが初期化され、すぐにfirstResponderになることができます。また、modalVC(self)にデリゲートを設定します。 modalViewは、UITextFieldとキーボードをすぐに開くことができます。 しかし、画面上の他の場所をタッチまたはクリックすると、キーボードは閉じられません。フォーカスをUITextFieldから切り離してfirstResponderを終了しますが、キーボードは閉じていません。

この厄介な問題の原因は何ですか?どうすればこの問題を正しく解決できますか?

コード:

これは、すべてのキーボードでこのmindnumbing問題を除いて、私が望むように働いているの.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]; 
     } 
    } 
} 

。 この質問を書いたとしても、私は可能な解決策について同様の問題を確認しました。

ご協力いただければ幸いです。私はここで頭痛を覚えています...


私が以下に受け入れた解決法によって解決されました。

今後の参考として、具体的な解決策を得るために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を実装して、ルートビューの背面に送信することもできます。ボタンをクリックすると、最初のレスポンダーが辞退します。

ここには他の回答と同様の解決策があります。

関連する問題