Имам приложение, в което добавям нов елемент към изглед на таблица, като накарам потребителя да докосне бутон за редактиране, който показва клетка с текстово поле в долната част на таблицата, подобно на вграденото приложение за известия. Трябва да коригирам таблицата, когато се показва клавиатурата, така че да не се пречи, когато има много редове в таблицата. Правя това, като се абонирам за известието, когато клавиатурата показва:
- (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;
}
Въпреки това, таблицата, към която позволявам на потребителя да добави ред, също може да бъде докосната и нов изглед се изпраща към приложението. Този изглед също има текстов изглед и когато потребителят го докосне и клавиатурата покаже, първият контролер на изгледа все още получава известието, което причинява срив.
Как мога или да игнорирам известието, или да го накарам да не се задейства, когато се натисне нов изглед?