Просто столкнулся с очень странным поведением в моем приложении. Я воссоздал проблему в простейшем случае:
NSMutableArray *data;
- (void)viewDidLoad {
[super viewDidLoad];
data = [[NSMutableArray arrayWithObjects:@"1", @"2", @"3", nil] retain];
}
- (UIView *)tableView:(UITableView *)aTableView viewForHeaderInSection:(NSInteger)section {
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, 32.0)];
header.backgroundColor = [UIColor lightGrayColor];
[header addSubview:self.button];
return header;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[data removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return data.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
cell.textLabel.text = [data objectAtIndex:indexPath.row];
return cell;
}
- (void)dealloc {
[super dealloc];
}
Каждый раз, когда я удаляю строку; кнопка в моем заголовке исчезает! Это происходит независимо от того, какой тип анимации строк я использую. Если я прокручиваю таблицу вверх, чтобы заголовок прокручивался; кнопка возвращается, когда возвращается заголовок. Кнопка создается в xib-файле.
Я могу обойти это одним из двух способов:
- Перезагрузка таблицы просмотра данных после удаления; с задержкой, чтобы анимация удаления выполнялась первой.
Создание кнопки в viewForHeaderInSection вместо в интерфейсе Builder.
Мне бы очень хотелось понять, что здесь происходит. Куда идет кнопка? Я подтвердил, что viewForHeaderInSection вызывается при удалении строки.
Редактировать Я пытался изменить его, чтобы кнопка создавалась в viewForHeader, а не в xib, но это вызывает другие странные проблемы ... когда я создаю или удаляю кнопку, я устанавливаю определенные свойства, такие как заголовок и включенные в зависимости от количества элементов в таблице. Когда я удаляю последнюю строку в таблице, я не вижу обновления в тексте и включенного состояния, пока не прокручиваю кнопку с экрана и снова включаю.