jubilee

Programing, Books and more...

UITextFieldでキーボード閉じる方法3つ

UITextFieldで、表示されているキーボードを閉じる方法のまとめ。
パターン的には3つ。

  1. UITextFieldのアクションを使用(リターンキーで閉じる)
  2. UITextFieldのデリゲートを使用(リターンキーで閉じる)
  3. Tap Gestureを使用(他の場所をタップで閉じる)

UITextFieldのアクションを使用(リターンキーで閉じる)

StoryBoardを使った、一番お手軽なパターン。
キーボードのリターンキーで、キーボードが閉じる。

  • StoryBoard上でUITextFieldを右クリック
  • Sent Events –> Did End On Exitを選択
  • Ctrl + ドラッグでアクション接続
  • IBActionのメソッド内に処理は不要

UITextFieldのアクションを使用(リターンキーで閉じる)

よく見かけるパターン。
キーボードのリターンキーで、キーボードが閉じる。

  • プロトコルを接続(.hの@interface部分)
  • .mにデリゲートメソッドを追加
  • 処理を記述
ViewController.h
1
2
3
@interface ViewController : UIViewController<UITextFieldDelegate>

@end
ViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (void)viewDidLoad
{
    [super viewDidLoad];
    // デリゲートを設定
    _textField.delegate = self;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    // これか
    [self.view endEditing:YES];
    // これ
    [_textField resignFirstResponder];
    return YES;
}

Tap Gestureを使用(他の場所をタップで閉じる)

キーボードのリターンキーではなく、他の場所をタップした際にキーボードを閉じる。

  • StoryBoard上で、ViewControllerに Tap GestureRecognizer を追加
  • Ctrl + ドラッグでアクション接続
  • 処理を記述
ViewController.m
1
2
3
4
5
6
7
8
9
- (IBAction)onTapView:(id)sender
{
    // これか
    [self.view endEditing:YES];
    // こんな感じ
    if ([_textField isFirstResponder]) {
        [_textField resignFirstResponder];
    }
}