通常、テキスト入力領域に触れるとキーボードがポップアップし、画面の空白領域に触れるとキーボードが消えます。それを実現する方法は?
iPhoneサファリで経験したのと同じように...
ありがとうございました
通常、テキスト入力領域に触れるとキーボードがポップアップし、画面の空白領域に触れるとキーボードが消えます。それを実現する方法は?
iPhoneサファリで経験したのと同じように...
ありがとうございました
更新された方法 (推奨):
- (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: アクションに接続して試してみてください。
このシンプルなソリューションを使用してください
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、およびすべてのサブビューで動作します。
簡単な解決策がある背景にボタンを置くことを忘れてください
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.textfieldName resignFirstResponder];
}
ここにその問題に関するチュートリアルがあります(DONEキーのない数値キーボードに関するものも)こちら
> 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];
次のコードは、xamarin iOS プロジェクトで正常に動作します。
public override void TouchesBegan (NSSet touches, UIEvent evt){
View.EndEditing (true);
}
この方法でもできます
ビュー内の背景をタッチしてキーボードを非表示にする
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self view] endEditing:YES];
}
私もこの問題を抱えていました、それは非常に迷惑でした。しかし、偶然にキーボードを取り除く方法を見つけました。たとえば、John にテキスト メッセージを送信していて、キーボードが邪魔になって会話を表示しているとします。そのため、表示される画面が縮小されます。次に、左上のメッセージをクリックしてから、テキストメッセージの記録がある別の人を選択し、左上のメッセージをもう一度クリックします. 次に戻ってジョンを選択します。いいえ、ジョンとの会話に戻りました。キーボードが消えました。継ぎ目はたくさんありますが、かなり速いです。キーボードに非表示ボタンを配置するだけだと思うでしょう笑それが役立つことを願っています、または十分に明確でした.
Swift と iOS 8/9 を使用している場合、このソリューションは正常に機能するはずです。
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
「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];
}