Мое предложение состоит в том, чтобы не реализовывать функцию «Добавить» в виде кнопки на панели навигации. Я предполагаю, что вы имеете дело с табличным представлением элементов ниже, поэтому одним из способов обработки этого взаимодействия с пользователем является отображение опции «Добавить новый элемент» в качестве последней записи в табличном представлении. Это может быть программно затенено, когда пользователь нажимает кнопку «Изменить» на панели навигации, реализуя следующий метод делегата:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];
[self.tableView beginUpdates];
[self.tableView setEditing:editing animated:YES];
if (editing)
{
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[objects count] inSection:0];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
else
{
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[objects count] inSection:0];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
[self.tableView endUpdates];
}
Затем вам необходимо убедиться, что дополнительная строка учтена путем увеличения количества строк с использованием следующего:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView.editing)
return ([objects count] + 1);
else
return [objects count];
}
и затем показывает зеленый знак плюс слева от него, в отличие от обычного стиля редактирования удаления:
- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.editing == NO || !indexPath) return UITableViewCellEditingStyleNone;
if (indexPath.row >= [objects count])
return UITableViewCellEditingStyleInsert;
else
return UITableViewCellEditingStyleDelete;
return UITableViewCellEditingStyleNone;
}
Конечно, вам нужно будет указать имя для него в своей cellForRowAtIndexPath: реализации и также обработать выбор строки.