#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. Создание пользовательского делегата для представления элемента и назначение его родительскому элементу, который также будет работать, требует немного больше кода, но в целом более чистый.