テキストフィールドがあるビューでよくやるパターンです。
キーボードを閉じるためのシングルタップジェスチャを用意
@interface HogeVC ()
@property(nonatomic, strong) UITapGestureRecognizer *singleTap;
@end
ビューの初期化時にジェスチャをself.viewに登録
-(void) viewDidLoad {
[super viewDidLoad];
self.singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap:)];
self.singleTap.delegate = self;
self.singleTap.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:self.singleTap];
}
ビューコントローラにUIGestureRecognizerDelegateを実装
@interface HogeVC : UIViewController
<UITextFieldDelegate, UIGestureRecognizerDelegate>
@end
シングルタップされたらresignFirstResponderでキーボードを閉じる。
-(void)onSingleTap:(UITapGestureRecognizer *)recognizer {
[self.textField resignFirstResponder];
}
キーボードを表示していない時は、他のジェスチャに影響を与えないように無効化しておく。
-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if (gestureRecognizer == self.singleTap) {
// キーボード表示中のみ有効
if (self.textField.isFirstResponder) {
return YES;
} else {
return NO;
}
}
return YES;
}