71

通常、テキスト入力領域に触れるとキーボードがポップアップし、画面の空白領域に触れるとキーボードが消えます。それを実現する方法は?

iPhoneサファリで経験したのと同じように...

ありがとうございました

4

11 に答える 11

114

更新された方法 (推奨):

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
   [self.view endEditing:YES];
}

これにより、すべてのサブビューの編集が終了し、ファーストレスポンダが辞任します。

他の方法 (すべてのテキスト ビューを列挙する):

そのためのステップバイステップは次のとおりです。

- (IBAction)backgroundTouch:(id)sender などの IBAction をビュー コントローラに追加します。

backgroundTouch アクションでは、resignFirstResponder メッセージをビュー内のすべてのテキスト ボックスに送信する必要があります。これは残念ですが、現在 FirstResponder ステータスを持つオブジェクトを取得する方法がないため、必要です。次のようになります。

- (IBAction)backgroundTouch:(id)sender {
  [someTextBox resignFirstResponder];
  [anotherTextBox resignFirstResponder];
}

ビューにボタン コントロールを追加し、表示領域全体をカバーするサイズにします (ステータス バー、タブ、またはナビゲーション コントローラーを除く)。ボタンを選択し、[レイアウト] メニューに移動して、[最背面へ移動] を選択します。また、ボタンの Type を custom に設定します。これは、特に描画コードを指定しない場合は表示されません。

Button の Touch Up Inside イベントを backgroundTouch: アクションに接続して試してみてください。

于 2009-04-30T02:35:18.500 に答える
72

このシンプルなソリューションを使用してください

Swift 4 の場合:

   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
   }

Swift 2 の場合:

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

目的 C の場合:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
   [self.view endEditing:YES];
}  

UITextField、UITextView、およびすべてのサブビューで動作します。

于 2012-03-08T14:10:20.540 に答える
16

簡単な解決策がある背景にボタンを置くことを忘れてください

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.textfieldName resignFirstResponder];
}
于 2011-11-19T17:39:46.733 に答える
4

ここにその問題に関するチュートリアルがあります(DONEキーのない数値キーボードに関するものも)こちら

于 2009-07-29T11:05:30.930 に答える
4

> iOS 4.0 の場合、別の解決策があります (おそらくもっと良いでしょう)。このコードでは、ビュー内の任意の場所を 1 回タップしてキーボードを非表示にします。

// single tap to resign keyboard
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithBlock:^(UIGestureRecognizer *rec){
            [input_text resignFirstResponder];
        }];
self.singleTapRecognizer.numberOfTapsRequired = 1;
self.singleTapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:singleTapRecognizer];
于 2011-12-27T15:38:51.607 に答える
1

次のコードは、xamarin iOS プロジェクトで正常に動作します。

public override void TouchesBegan (NSSet touches, UIEvent evt){
    View.EndEditing (true);
}
于 2015-02-02T11:40:07.197 に答える
1

この方法でもできます

ビュー内の背景をタッチしてキーボードを非表示にする

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self view] endEditing:YES];
}
于 2014-08-05T08:03:19.067 に答える
0

私もこの問題を抱えていました、それは非常に迷惑でした。しかし、偶然にキーボードを取り除く方法を見つけました。たとえば、John にテキスト メッセージを送信していて、キーボードが邪魔になって会話を表示しているとします。そのため、表示される画面が縮小されます。次に、左上のメッセージをクリックしてから、テキストメッセージの記録がある別の人を選択し、左上のメッセージをもう一度クリックします. 次に戻ってジョンを選択します。いいえ、ジョンとの会話に戻りました。キーボードが消えました。継ぎ目はたくさんありますが、かなり速いです。キーボードに非表示ボタンを配置するだけだと思う​​でしょう笑それが役立つことを願っています、または十分に明確でした.

于 2011-07-26T23:13:27.737 に答える
0

Swift と iOS 8/9 を使用している場合、このソリューションは正常に機能するはずです。

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
         self.view.endEditing(true)
    }
于 2015-06-12T21:35:00.423 に答える
0

「initWithBlock:」セレクターを使用して、上記の Val の回答をコンパイルできませんでした。

このコードは私にとってはうまくいきます。これをビューを定義するメソッドに追加します。私のビューは構成されており、シングルタップに応答したいサブビューは「chatView」です。キーボードを使用する入力フィールド ビューは「chatInput」という名前です。

    // single tap to resign (hide) the keyboard
    UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
    singleTapRecognizer.numberOfTouchesRequired = 1;
    singleTapRecognizer.cancelsTouchesInView = NO;
    [chatContent addGestureRecognizer:singleTapRecognizer];

次に、タップ処理メソッドを追加します。

/**
 * Handles a recognized single tap gesture.
 */
- (void) handleTapFrom: (UITapGestureRecognizer *) recognizer {
    // hide the keyboard
    NSLog(@"hiding the keyboard");
    [chatInput resignFirstResponder]; 
}
于 2012-07-12T02:51:23.650 に答える