iPhone — Обновление TableView VC из более высокого ViewController

#iphone #uitableview #uiviewcontroller

#iPhone #uitableview #uiviewcontroller

Вопрос:

У меня есть ViewController (A) с TableView, где каждая строка является именем каталога. Каждая строка запускает новый ViewController (B). Внутри ViewController B я запускаю метод для удаления текущего открытого каталога. Однако, когда я открываю view и возвращаюсь к TableView, у меня, очевидно, все еще есть этот каталог в списке. Как я могу это исправить?

Как я могу обновить TableView при возврате к навигации?

И нет, simple [self.tableView reloadData] inside -viewWillAppear на самом деле не работает.

Код:

Появится My -viewWill:

 - (void)viewWillAppear:(BOOL)animated {
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    self.arrFolders = [[NSMutableArray alloc] init];
    [self allFilesInDocuments:docDir];
}
  

-allFilesInDocuments просто добавляет элементы в массив ( [arrFolders addObject:folder]; ).

Внутри -tableView:cellForRowAtIndexPath: я добавляю данные с

 cell.textLabel.text = [arrFolders objectAtIndex:indexPath.row];
  

Комментарии:

1. [self.TableView reloadData]; это простой способ обновить таблицу.

2. вы вообще прочитали весь вопрос?

Ответ №1:

Используйте NSNotification.

В viewDidLoad ViewController (A) зарегистрируйтесь для получения уведомления:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deletedRow:) name:@"deletedRow" object:nil];
  

Также добавьте функцию выбора:

 -(void) deleteRow:(NSNotification *)notif{
[self.tableView reloadData];
  

}

Наконец, в дочерних контроллерах просмотра в вашей функции удаления опубликуйте уведомление:

 [[NSNotificationCenter defautCenter] postNotificationName:@"deletedRow" object:nil userInfo:nil];
  

Надеюсь, это поможет

Ответ №2:

Редактирование источника данных и перезагрузка в viewWillAppear должны были сработать, хотя в противном случае вы могли бы выполнить обновление с помощью вызова родительского контроллера просмотра или NSNotification.

Комментарии:

1. NSNotification лучше, избавляет вас от ненужных перезагрузок, когда ничего не было удалено.

2. Создание пользовательского делегата для представления элемента и назначение его родительскому элементу, который также будет работать, требует немного больше кода, но в целом более чистый.