【问题标题】:How to trigger viewWillAppear when going back in the navigation controller hierarchy?返回导航控制器层次结构时如何触发viewWillAppear?
【发布时间】:2010-11-21 21:41:51
【问题描述】:

当返回到 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 实际上是 Utility 风格的应用程序的另一面。

【问题讨论】:

    标签: iphone objective-c ios uinavigationcontroller viewwillappear


    【解决方案1】:

    只是说我用另一种方式解决了这个问题。我需要调用 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 被取消的方式肯定有些奇怪。

    【讨论】:

    • 你什么时候打电话的?在弹出现有的视图控制器之前?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2016-11-30
    相关资源
    最近更新 更多