Обновление таблицы при вставке / удалении строк - PullRequest
0 голосов
/ 05 октября 2010

У меня есть одноэлементный класс, который используется для отображения данных в различных представлениях.

Существует один 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 корректно отображаться.

1 Ответ

0 голосов
/ 05 октября 2010

Я не совсем понял, почему повторяющиеся строки были связаны с обновлением табличного представления.Но это звучит как будто вы создаете две таблицы, как-нибудь?Или даже два контроллера вида друг на друга, но я предполагаю, что ваш навигационный код настроен правильно (использование вкладок может вызвать это с неправильным кодом инициализации viewcontroller).содержимое таблиц в ViewWillAppear.

Получаете ли вы дубликаты ячеек даже при обновлении в ViewDidLoad (обычно вызывается только при первом появлении представления).Чтобы выполнить при переходе назад,

Если вы хотите обновить данные таблицы, используйте [tableview reloadData] в ViewWillAppear.

Если все остальное не удается, для отслеживания этой ошибки я рекомендую добавитьВыражение для объекта tableView и отслеживание его изменения (в режиме отладки).

...