我一直在尝试使用各种方法在返回到UINavigationController的第一级时触发一些代码,但以下都没有工作......
// HomeViewController.m
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
NSLog(@"trigger 1");
}
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"trigger 2");
}
-(void) viewDidAppear:(BOOL)animated {
NSLog(@"trigger 3");
}
我开始认为我设置了我的应用程序错误..是否有关于在UIViewControllers中使用UIViewControllers的事情?
这是应用程序的笔尖..它是一个UITabBarController,每个选项卡都有一个导航控制器,在其中是UINavigationController的第一页。这个设置是不触发方法的原因吗?
这里没有显示底部的UIView,它链接到文件所有者的视图。为了使它更复杂,MainViewController实际上是实用程序式应用程序的另一面。
答案 0 :(得分:0)
只是说我用另一种方式解决了这个问题。我需要调用类似viewWillAppear的东西,因为我需要在第二个视图中更改某些内容时更新我的第一个视图表。
我实现它的方式是,在我的'tableView:commitEditingStyle'方法中(在我删除了某些内容后调用),我把它放在最后..
[[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0] reloadTheTable];
reloadTheTable是我的HomeViewController中的一个方法,可以处理更新数组和[tableView reloadData]等内容;
这是很多括号。我确定我的笔尖可以设置为更简单。我认为卡斯帕罗夫已经说过他认为前进了四步......我的限制是四个括号。
我通过做这样的事情来解决这个问题:
NSString *name = NSStringFromClass ([[self parentViewController] class]);
NSLog(@"%@", name); // outputs UINavigationController
然后慢慢添加,直到找到我要找的东西:
name = NSStringFromClass ([[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0] class]); //UINavigationController
NSLog(@"%@", name); // outputs HomeViewController
在视图中放置视图时,viewWillAppear被取消的方式肯定有些奇怪。