编码自定义SplitViewController - 何时应该调用viewWillAppear,viewDidAppear等...?

时间:2010-11-23 20:48:51

标签: iphone ipad uisplitviewcontroller viewdidappear viewwillappear

我正在从头开始编写自己的SplitViewController(即通过继承UIViewController而不是UISplitViewController)。

它有两个子视图控制器(一个用于左侧面板,一个用于详细信息右侧面板),我需要向其发送相应的消息(viewWillAppear, viewDidAppear, viewWillDisapppear and viewDidDisappear)。

我已经在我的自定义SplitViewController接收它们时转发这些消息,并且它工作正常。但是,当两个子视图控制器中的任何一个被新的替换时,我正在努力弄清楚何时发送它们,这也需要接收这些消息。我正在正确地添加新UIViewController的视图,但没有充分调用消息。

我最初的方法是在sub-viewControllers的setter中调用它们,将viewWillDisappear调用到UIViewController即将发布,viewWillAppear调用新的UIViewController集,但是这个在viewDidLoad之前执行,因此我认为是错误的。

我还看到UIView有一个方法didAddSubview:,可能有助于知道何时在通讯员viewDidAppear上致电UIViewController

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

如果你想镜像UISplitViewController,最好只有假的UIViewControllers,每当调用每个方法时都会打印出来。

关于viewWillDisappear,viewWillAppear和viewDidLoad排序的当前问题,只需执行:

-(void)setSomeViewController(UIViewController newVC)
{
    [oldVC viewWillDisappear];
    [newVC view]; // Causes newVC to load the view, 
                  // and will automatically call -viewDidLoad
    [newVC viewWillAppear];

    [oldVC.view removeFromSuperview];
    [self.view addSubview:newVC.view];

    //retain and release as appropriate
    // other stuff you'll need to mirror, etc. etc.
}