self.dictionaryOfNumbers.allKeys[section];
NSArray *sectionArray = self.dictionaryOfNumbers[sectionNameInDictionary];
return sectionArray.count;
}
— (UITableViewCell *) tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier
forIndexPath: indexPath];
NSString *sectionNameInDictionary =
self.dictionaryOfNumbers.allKeys[indexPath.section];
NSArray *sectionArray = self.dictionaryOfNumbers[sectionNameInDictionary];
NSNumber *number = sectionArray[indexPath.row];
cell.textLabel.text = [NSString stringWithFormat:@"%lu",
(unsigned long)[number unsignedIntegerValue]];
return cell;
}
— (NSString *) tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section{
return self.dictionaryOfNumbers.allKeys[section];
}
Навигационная кнопка связана с селектором deleteOddNumbersSection:. Этот метод нам сейчас предстоит запрограммировать. Цель метода, как видно из его названия[2], — найти раздел, соответствующий всем нечетным числам в источнике данных, найти табличный вид, а потом удалить искомый раздел и из таблицы, и из источника данных. Вот как это делается:
— (void) deleteOddNumbersSection:(id)paramSender{
/* Сначала удаляем раздел из источника данных. */
NSString *key = SectionOddNumbers;
NSInteger indexForKey = [[self.dictionaryOfNumbers allKeys]
indexOfObject: key];
if (indexForKey == NSNotFound){
NSLog(@"Could not find the section in the data source.");
return;
}
[self.dictionaryOfNumbers removeObjectForKey: key];
/* Затем удаляем раздел из табличного вида. */
NSIndexSet *sectionToDelete = [NSIndexSet indexSetWithIndex: indexForKey];
[self.tableViewNumbers deleteSections: sectionToDelete
withRowAnimation: UITableViewRowAnimationAutomatic];
/* Наконец, убираем с навигационной панели кнопку,
так как она нам больше не понадобится. */
[self.navigationItem setRightBarButtonItem: nil animated: YES];
}
Все довольно просто. Теперь, когда пользователь нажмет кнопку на навигационной панели, раздел Odd Numbers (Нечетные числа) исчезнет из табличного вида. Как видите, в процессе удаления раздела табличный вид анимируется. Это происходит потому, что мы передали анимационный тип UITableViewRowAnimationAutomatic параметру withRowAnimation: метода deleteSections: withRowAnimation: табличного вида. Теперь запустите приложение в эмуляторе iOS и выполните Debug — Toggle Slow Animations (Отладка — Включить медленную анимацию). Потом попробуйте нажать кнопку на навигационной панели и посмотрите, что происходит. Как видите, удаление сопровождается медленной анимацией (движением). Красиво, правда? Когда удаление завершится, приложение будет выглядеть, как на рис. 4.16.
Рис. 4.16. Раздел, содержащий нечетные числа, удален из табличного вида
Вы уже знаете, как удалять разделы из табличных видов. Перейдем к удалению ячеек. Мы собираемся изменить функциональность навигационной кнопки так, чтобы при ее нажатии во всех разделах табличного вида удалялись все ячейки, содержащие числовое значение больше 2. Таким образом, мы удалим все четные и нечетные числа больше 2. Итак, изменим навигационную кнопку в методе viewDidLoad контроллера вида:
— (void)viewDidLoad {
[super viewDidLoad];
self.barButtonAction =
[[UIBarButtonItem alloc]
initWithTitle:@"Delete Numbers > 2"