Как перезагрузить tableView после закрытия NavigationController в uisplitviewcontroller? - PullRequest
3 голосов
/ 05 сентября 2011

Я использую UISplitviewController в качестве шаблона.

действие для кнопки редактирования:

newExViewController *editWindow =[[newExViewController alloc]initWithNibName:@"newExViewController" bundle:nil];
UINavigationController *navBar=[[UINavigationController alloc]initWithRootViewController:editWindow];
navBar.modalPresentationStyle = UIModalPresentationFormSheet;
navBar.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

[self presentModalViewController:navBar animated:YES];
[navBar release];

[editWindow release];

navBar имеет UIBarButton для кнопки сохранения. Это вызывается, когда вы нажимаете SaveButton

[self dismissModalViewControllerAnimated:YES];

теперь проблема: Любая идея, как перезагрузить данные для основного NavigationConteroller и detailViewController, когда modalView отклонен ?? я понятия не имею Thnx

Ответы [ 2 ]

7 голосов
/ 05 сентября 2011

Вы должны посмотреть на NSNotificationCenter. По вашему мнению с UITableView, создайте слушателя уведомлений. Затем в представлении, которое отклоняет, вызовите это уведомление.

Чтобы быть более точным, Уведомление вызовет метод, который должен содержать reloadData.

Пример

Следующее должно идти с UITableView, который вы хотите перезагрузить:

Это может согласиться с вашим [self dismissModalViewControllerAnimated:YES];

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

Вот так вы позвоните в центр уведомлений для перезагрузки таблицы:

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTable" object:self];

Пример метода уведомления:

- (void)someMethodToReloadTable:(NSNotification *)notification 
{
    [myTableView reloadData];  
}

И не забудьте удалить наблюдателя за уведомлением:

-(void)viewDidUnload 
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"reloadTable" object:nil];
}
3 голосов
/ 05 сентября 2011

В контроллерах, которые содержат представление, которое вы хотите перезагрузить, вы должны отказаться от следующего метода, который будет вызываться при отклонении modalView (или когда основной вид контроллера будет загружен в первый раз):

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    // here you can reload needful views, for example, tableView:
    [tableView reloadData];
}  
...