組み込みの通知アプリと同様に、テーブルの下部にテキストフィールドセルを表示する編集ボタンをユーザーにタップさせることで、テーブルビューに新しいアイテムを追加するアプリがあります。キーボードが表示されているときにテーブルを調整して、テーブルに多くの行があるときに邪魔にならないようにする必要があります。キーボードが表示されたときの通知を購読することでこれを行っています:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector (keyboardDidShow:)
name: UIKeyboardDidShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector (keyboardDidHide:)
name: UIKeyboardDidHideNotification
object:nil];
}
...
...
-(void) keyboardDidShow: (NSNotification *)notif
{
// If keyboard is visible, return
if (self.keyboardVisible)
{
return;
}
// Get the size of the keyboard.
NSDictionary* info = [notif userInfo];
NSValue* aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyboardSize = [aValue CGRectValue].size;
// Adjust the table view by the keyboards height.
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0);
NSIndexPath *path = [NSIndexPath indexPathForRow:self.newsFeeds.count inSection:0];
[self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES];
self.keyboardVisible = YES;
}
ただし、ユーザーに行を追加させたテーブルもタップでき、新しいビューがアプリにプッシュされます。このビューにはテキスト ビューもあり、ユーザーがそれをタップしてキーボードに表示されると、最初のビュー コントローラーが引き続き通知を受け取るため、クラッシュが発生します。
新しいビューがプッシュされたときに通知を無視するか、通知を起動しないようにするにはどうすればよいですか?