ビューコントローラーを作成しました。テキスト ラベルを含む一連のカスタム セルを含むテーブルビューをセットアップします。キーボードが表示されたときに、テーブルビューのフレームのサイズが自動的に変更されません。インターフェイスビルダーに欠けているチェックボックスはありますか?
どのような設定を確認すればよいですか?
ビューコントローラーを作成しました。テキスト ラベルを含む一連のカスタム セルを含むテーブルビューをセットアップします。キーボードが表示されたときに、テーブルビューのフレームのサイズが自動的に変更されません。インターフェイスビルダーに欠けているチェックボックスはありますか?
どのような設定を確認すればよいですか?
ビュー コントローラーに次のキーボード通知イベントを追加します。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
キーボード通知に従って、tableView のフレームのサイズを変更します。
- (void)keyboardDidShow:(NSNotification *)notification
{
NSDictionary *userInfo = [notification userInfo];
CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
CGRect frame = CGRectMake(self.tableView.frame.origin.x,
self.tableView.frame.origin.y,
self.tableView.frame.size.width,
self.tableView.frame.size.height - size.height);
self.tableView.frame = frame;
}
- (void)keyboardWillHide:(NSNotification *)notification
{
NSDictionary *userInfo = [notification userInfo];
CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,
self.tableView.frame.origin.y,
self.tableView.frame.size.width,
self.tableView.frame.size.height + size.height);
}
タップ セルを上にスクロールする場合は、textFieldDidBeginEditing:
メソッドで次の変更を行います。
- (void) textFieldDidBeginEditing:(UITextField *)textField {
UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview];
[self.tableView scrollToRowAtIndexPath:[tView indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
を使用している場合はUIViewController
、キーボードが表示されたときにサイズ変更コードを記述する必要があります。UIKeyboardWillShowNotification, UIKeyboardDidShowNotification, UIKeyboardWillHideNotification, UIKeyboardDidHideNotification
テーブルビューのサイズを適切に変更できます。