ユーザー/パスワードのログイン制御にUITableViewを使用しています。現在、ログインボタンとともにビューの唯一のコントロールです。内部をクリックすると、テキスト編集コンテンツがアクティブになり、キーボードがポップアップして入力できます。ただし、編集を停止する方法はありません。UIViewの白い領域の外側をクリックして、UITableVIew内のテキストエディタからフォーカスを外し、キーボードが再び非表示になるようにします。
それ、どうやったら出来るの?
アルファチャネルがゼロに等しいボタンを追加できます。ログインとパスワードのフィールドの後ろにあります。次の方法で、このボタンにアクションを設定します。
-(void)hideKeyboard:(id)sender
{
[self.username resignFirstResponder];
[self.password resignFirstResponder];
}
ビューコントローラにviewDidLoad
キーボード通知をリッスンさせ、tableViewの外部のすべてのイベントを受信するタップレコグナイザーを作成します。
- (void)viewDidLoad
{
[super viewDidLoad];
...
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:) name:
UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:) name:
UIKeyboardWillHideNotification object:nil];
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard:)];
...
}
次に、キーボードの通知方法で、ジェスチャレコグナイザーをビューに追加および削除します。
//add gesture recognizer when keyboard appears
-(void)keyboardWillShow:(NSNotification *) note {
[self.view addGestureRecognizer:tapRecognizer];
}
//remove it when keyboard disappears
-(void)keyboardWillHide:(NSNotification *) note
{
[self.view removeGestureRecognizer:tapRecognizer];
}
ジェスチャレコグナイザーのアクションメソッドでは、すべてのファーストレスポンダーを辞任してキーボードを閉じます。
-(IBAction)dismissKeyboard:(id)sender
{
//this removes ALL firstResponder from view
[self.view endEditing:TRUE];
}
ある時点でキーボード通知の聞き取りを終了することを忘れないでください。
[[NSNotificationCenter defaultCenter] removeObserver:self];
シングルタップGestureRecognizerを追加し、呼び出された関数でキーボードを辞任します
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignKeyBoard)];
[tap setNumberOfTapsRequired:1];
[self.view addGestureRecognizer:tap];