1

私はしばらくの間壁に頭をぶつけてきましたが、それでもこの問題を解決することはできませんでした。

UITextField(myTroubleMakerと呼びましょう)と他のいくつかの重要でないコンポーネントを含むmodalViewControllerがあります。modalVCをロードするとき、UITextFieldを初期化し、それがすぐにfirstResponderになることを許可します。また、そのデリゲートをmodalVC(自己)に設定します。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];
        }
    }
}

キーボードに関するこの気の遠くなるような問題を除いて、それはすべて私が望むように機能しています。この質問を書いているときでさえ、私は可能な解決策について同様の問題をチェックしました。

どんな助けでもいただければ幸いです。ここで頭痛がします...


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

今後の参考のために、 devforums.apple.com / message/425914を使用して特定のソリューションを入手しました。私はnavigationControllerでmodalVCを渡していたので、UINavigationControllerでカテゴリを作成し、それにメソッドを追加して、キーボードの自動解除をサポートする必要がありました。

4

2 に答える 2

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

于 2011-10-26T10:12:16.933 に答える
0

1つのオプションは、カスタムUIButtonを実装し、それをルートビューの背面に送信することです。ボタンのクリックで、ファーストレスポンダーを辞任します。

ここに他の答えのようなより多くの解決策があります。

于 2011-10-26T10:11:57.283 に答える