1

当返回到 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 吗?

这是应用程序的 nib。它是一个 UITabBarController,每个选项卡都有一个导航控制器,并且在 UINavigationController 的第一页内。这个设置是方法没有触发的原因吗?

替代文字

未显示底部的 UIView 链接到文件所有者的视图。更复杂的是,MainViewController 实际上是实用程序风格应用程序的另一面。

4

1 回答 1

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 被取消的方式肯定有些奇怪。

于 2010-11-22T00:22:29.697 回答