読者です 読者をやめる 読者になる 読者になる

mzgkworks

iOSを中心にプログラミング関係について書く

【Objective-C】UITextField以外をタップしたらキーボードを消す一番簡単な方法

入力欄以外をタップした時に、キーボードを消す一番簡単な方法。
ジェスチャーイベント等の追加は不要。

環境

Xcode6.1.1 Objective-C

ViewController.m

UIViewControllerはUIResponderを継承しているので、タップを検知する touchBegan:withEvent: が使用できる。

@interface ViewController ()
// UITextField
@property (weak, nonatomic) IBOutlet UITextField *searchField;
@end

@implementation ViewController
// これを追加
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // キーボードが表示:消す
    if (_searchField.isFirstResponder) {
        [_searchField resignFirstResponder];
        //[self.view endEditing:YES];   // こちらでもOK
    }
    // キーボードが非表示:表示する
    else {
        [_searchField becomeFirstResponder];
    }
}
@end

教訓

継承を意識する。

補足:キーボードの改行で非表示にする

UITextFieldDelegate を使う。

// ViewController.hに<UITextFieldDelegate>追加
@interface ViewController : UIViewController<UITextFieldDelegate>
@end
@implementation ViewController
// デリゲートメソッド(改行キータップ時)
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [_searchField resignFirstResponder];
    return YES;
}
@end