web-dev-qa-db-ja.com

空の領域がiPhoneでタッチされたときにキーボードを非表示にする方法

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

私たちがiPhoneサファリで経験したことと同じように...

ありがとうございました

71
Neo Wu

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

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

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

その他の方法(すべてのテキストビューを想定):

これをステップバイステップで説明します。

-(IBAction)backgroundTouch:(id)senderなどのIBActionをView Controllerに追加します

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

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

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

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

115
HitScan

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

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)
    }

Objective Cの場合:

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

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

73
Shahid Aslam

バックグラウンドにボタンを置くことを忘れて簡単な解決策

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.textfieldName resignFirstResponder];
}
16
alex

here でその問題に関するチュートリアルがあります(DONEキーのない数字キーボードについても)

4
JC

> iOS 4.0の場合、別の解決策があります(さらに良い場合があります)このコードでは、ビューの任意の場所をタップしてキーボードを非表示にします。

// 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];
4
Val

resignFirstResponderをコントロールに送信します。

2
Chris Lundie

この方法でもできます

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

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

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

public override void TouchesBegan (NSSet touches, UIEvent evt){
    View.EndEditing (true);
}
1
T. Naik

SwiftおよびiOS 8/9:

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

'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]; 
}
0
Stephen Reed

私もこの問題を抱えていましたが、非常に迷惑でした。しかし、偶然にキーボードを取り除く方法を見つけました。ジョンにテキストメッセージを送信しているときに、会話を表示するためのキーボードがあり、表示される画面が縮小しているとします。それでは、左上のメッセージをクリックしてから、テキストメッセージの記録を持っている別の人を選択し、左上のメッセージをもう一度ヒットします。その後、戻ってJohnを選択します。いいえ、ジョンとの会話に戻りました。キーボードが消えてしまいました。縫い目はとても好きですが、それはかなり速いです。あなたは彼らがキーボードに隠すボタンを置くだけだと思う​​だろう笑.

0
tinpony72