У меня есть UITableViewController
, который состоит из двух разделов.В первом разделе показана отдельная ячейка с центрированным текстом со словами Add a new Slide
.Второй раздел показывает текущие слайды.
Когда пользователь нажимает на ячейку Add a new slide
, в стек помещается новый UITableVeiwController
, отображающий редактор.Если пользователь сохраняет новый слайд (нажав «Сохранить»), ячейка добавляется в источник данных и редактор извлекается из стека.
У меня две проблемы:
Когда редактор открывается, если ячейка была удалена до того, как Add a new slide
была нажата, вместо новой отображается старая ячейка.Нажав на UITableViewController
(нажав автоматически сгенерированную кнопку «Назад»), это исправляется, но я бы не хотел, чтобы это произошло вообще.(Изначально всплывающее окно таблицы не обновлялось после появления редактора, поэтому я добавил [self.tableView reloadData];
к методу viewDidAppear
.)
После определенного количества слайдов последний слайдв списке становится ячейка Add a new slide
.Я знаю, что данные вводятся правильно, потому что другая часть приложения, которая использует тот же источник данных, обновляется правильно.Таблица поддерживает редактирование во втором разделе, и когда вы меняете порядок ячеек, она за кадром ведет себя правильно, но неправильная ячейка все еще там.
Что может происходитьon?
Вот мой код:
Обратите внимание, что, когда я готовился опубликовать свой код, я заметил несоответствие скобок.Проверка на cell==nil
, кажется, охватывает вторую часть кода, которая определяет содержимое ячеек.Это исправляет метку ячеек во втором разделе таблицы, но стиль по-прежнему неверен.С тех пор я исправил код, но оригинал размещен здесь.
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
if ([indexPath section] == 0 ) {
cell = [[[MBTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}else if([indexPath section] == 1){
cell = [[[MBTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
if ([indexPath section] == 0) {
[cell.textLabel setTextAlignment:UITextAlignmentCenter];
[cell.textLabel setText:@"Add a New Slide"];
}else if([indexPath section] == 1){
NSArray *storedViewsInfo = [[NSArray alloc] initWithArray:[kSettings arrayForKey:@"views"]];
if ([[[storedViewsInfo objectAtIndex:[indexPath row]] valueForKey:@"type"] isEqualToString:@"announcement"]) {
[cell.detailTextLabel setText:@"Custom Announcement"];
[cell.textLabel setText:[[[storedViewsInfo objectAtIndex:[indexPath row]] valueForKey:@"info"] valueForKey:@"text"]];
}
[storedViewsInfo release];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
}
}
return cell;
}