0

私は数字パッドを非表示にするために使用していますがresignFirstResponder、キーボードを非表示にするときはたまにしか機能しません。バックグラウンドでタップすると、キーボードは実際に非表示になります。この行も に追加しましたが、時々動作します。ユーザーが元のウィンドウに戻ると、キーボードは消えます。しかし、彼が新しいウィンドウ (元のウィンドウではない) に移動しても、キーボードは消えません。メソッドを使用してデバッグでチェックインしましたが、どちらの場合も、テキストフィールドは実際には最初のレスポンダーではありません (ただし、前述のように、キーボードが表示されたままになるケースが 1 つあります)。backgroundTap[textField resignFirstResponder];viewWillDisappearisFirstResponder

の実装viewWillDisappearは次のとおりです。

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [textField resignFirstResponder];
    [self.view endEditing:YES];
}

新しいウィンドウにはこのキーボードに関連するテキスト フィールドがないため、viewWillDisappear の両方のケースでキーボードを非表示にしたいと考えています。全く違う要素を持っています。

別のビューをプッシュするイベントは、ボタンのクリックではなく、テキスト フィールドの編集の開始です。ビューに 3 つのテキスト フィールドがありますが、そのうちの 1 つだけがキーボードを表示します。他の 2 つは別のビューをプッシュします。これは、textFieldDidBeginEditing のコードです。

-(void)textFieldDidBeginEditing:(UITextField *)textField{
    if (textField1.editing == YES)
    {
        [self performSegueWithIdentifier:@"goToView1" sender:self];
     }
    else if (textField2.editing == YES)
    {
        [self performSegueWithIdentifier:@"goToView2" sender:self];
    }

}

一方、キーボードを生成するテキスト フィールドは textField3 です。

どちらの場合もキーボードを非表示にする方法についてのアイデアはありますか?

4

2 に答える 2

0
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
     if (textField == textField1)
     {
         [self.view endEditing:YES]; 
         //else you can try with this also.
         [textField performSelector:@selector(resignFirstResponder)
                withObject:nil
                afterDelay:0];
         //
         [self performSegueWithIdentifier:@"goToView1" sender:self];
         return NO;
     }
     else if (textField == textField2)
     {
         [self.view endEditing:YES];
         [self performSegueWithIdentifier:@"goToView2" sender:self];
         return NO;
     }
    return YES;
}
于 2013-04-03T13:43:50.003 に答える