У меня есть одноэлементный класс, который используется для отображения данных в различных представлениях.
Существует один TableView, который используется для удаления / вставки строк.У меня есть кнопка, которая переключается между Edit / Done, чтобы разрешить редактирование.'streams - это переменная внутри класса Singleton'
- (void)setEditing:(BOOL)flag animated:(BOOL)animated{
int count = [streams count];
UITableView *tableView = (UITableView *)self.view;
NSArray *topIndexPath = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:count inSection:0]];
if (self.editing == YES)
{NSLog(@"EDITING");
[tableView insertRowsAtIndexPaths:topIndexPath withRowAnimation:UITableViewRowAnimationBottom];}
else{NSLog(@"NOT EDITING");
[tableView deleteRowsAtIndexPaths:topIndexPath withRowAnimation:UITableViewRowAnimationBottom];}
}
. И используйте editStyleForRowAtIndexPath, чтобы разрешить выбор стиля редактирования для каждой строки.
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
int count = [streams count];
int row = indexPath.row ;
if (row == count)
return UITableViewCellEditingStyleInsert;
else
return UITableViewCellEditingStyleDelete;}
Я использую cellForRowAtIndexPath для созданиядополнительная строка с текстом «Добавить номер телефона» в режиме редактирования.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *DeleteMeCellIdentifier = @"AudioCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
DeleteMeCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:DeleteMeCellIdentifier] autorelease];
}
int x = indexPath.row;
if (self.editing == YES)
{
if (indexPath.row == [streams count])
cell.textLabel.text = @"Add Phone Number";
else
cell.textLabel.text = [self.streams objectAtIndex:indexPath.row];
}
else
{
cell.textLabel.text = [self.streams objectAtIndex:indexPath.row];
}
return cell;}
Удаление строк работает нормально.При выборе для вставки строки другой вид помещается в стек.С этой точки зрения пользователю дается ряд текстовых опций для обозначения новой строки, которую мы только что создали.Следующий код используется для обновления одноэлементного класса после выбора.
- (void)viewWillDisappear:(BOOL)animated {
Disc *disc = [Disc sharedDisc];
[disc.streams insertObject:@"0208" atIndex:0];
[super viewDidAppear:animated];}
После выбора пользователем текста для строки необходимо нажать кнопку «Назад», чтобы вернуться к предыдущему виду таблицы.,Вот когда возникает проблема.В главном TableView вместо одной опции с надписью «Добавить номер телефона» есть две.
Я знаю, что класс singelton, который использует TableView, обновлен, это TableView, который не обновляется надлежащим образом.Если я затем переключаюсь между Edit / Done, то tableView отображает информацию корректно.
Я пытался обновить синглтон-класс в методах ViewDidLoad & ViewWillAppear, но результат тот же, при первой перезагрузке представленияон не отображает новую строку должным образом.
Я думал о переопределении «Back» BarButton, чтобы попытаться заставить TableView корректно отображаться.