代码之家  ›  专栏  ›  技术社区  ›  jamone

为什么viewwill不会消失,viewdid不会被调用?

  •  7
  • jamone  · 技术社区  · 14 年前

    我有一个 UINavigationController 用一个 UITableView 作为我的主菜单。用户点击一个单元格,一个新的视图被推到堆栈上。在一种情况下,我推另一种 UITableView公司 需要一个工具栏。所以在第二个tableView的init上我设置了 self.toolbarItems 具有正确项的属性。但我需要打电话 [self.navigationController setToolbarHidden:NO animated:YES]; 所以把这个叫做 viewDidAppear viewWillAppear 方法。但我把它放在那些方法中,发现(也通过NSLog)它们永远不会被调用。把它藏起来也一样 viewWillDisappear viewDidDisappear . 为什么不调用这些方法?那么我应该在哪里隐藏/显示工具栏呢?

    4 回复  |  直到 14 年前
        1
  •  18
  •   Alex Wayne    14 年前

    我注意到一个父控制器 UINavigationController UITabBarController )永远得不到 viewWill/DidAppear 调用它,它也不会调用子控制器。因此,确保在创建父控制器的代码中,调用 viewWillAppear ,显示出来,然后打电话 viewDidAppear . 然后它应该在适当的时候对它的子控制器进行调用。

    再次检查父控制器是否调用了这些方法,如果没有,请自己调用它们。

        2
  •  4
  •   Scott Berrevoets    11 年前

    是的,这是真的

    你可以先在

    - (void)viewDidLoad {
        self.navigationController.delegate = self;  
    }
    

    然后编写要在viewwill中编写的代码

    - (void)navigationController:(UINavigationController  *)navigationController didShowViewController:(UIViewController  *)viewController animated:(BOOL)animated {
    
        if ([viewController isKindOfClass:[self class]]) {
            //write your code here
        } 
    }
    
        3
  •  2
  •   Kendall Helmstetter Gelner    14 年前

    虽然你解决了你的问题,但如果将来有人来了,另一个问题可能是你忘记了动画:两种方法的参数-也就是说,方法的格式需要如下所示:

    - (void) viewWillAppear:(BOOL)animated
    
        4
  •  0
  •   eagle    11 年前

    我在iOS7中注意到了同样的问题。当我同时使用标签栏(2个按钮A,B)和导航控制器时。

    A有两种观点。一个是table view,另一个是根据从table视图中选择的内容显示数据。

    B是唯一的风景。

    按钮,它是指另一个单独的视图D,位于两个选项卡栏视图(A&B)和A的两个视图中。

    当我从选项卡项B中单击按钮时出现问题, viewWillAppear viewDidLoad 不打电话。

    所以我通过 presentModalViewController:animated: 为了回来我用 dismissModalViewControllerAnimated: ,就在我从选项卡项B转到视图D时。