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

Posted

技术标签:

【中文标题】编码自定义 SplitViewController - 我应该何时调用 viewWillAppear、viewDidAppear 等...?【英文标题】:Coding custom SplitViewController - when should I call viewWillAppear, viewDidAppear, etc...? 【发布时间】:2010-11-23 20:48:50 【问题描述】:

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

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

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

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

我还看到 UIView 有一个方法 didAddSubview:,它可能有助于了解何时在对应的 UIViewController 上调用 viewDidAppear

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

如果您想镜像 UISplitViewController,最好只使用在调用每个方法时打印出来的虚拟 UIViewController。

至于你目前对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.

【讨论】:

我还注意到,当您将 VC 的视图添加/删除到层次结构时,有时会自动调用 -viewWillAppear:(或者是 -viewWillDisappear?)。诚然,这是为了实现自定义视图转换,在视图层次结构的上层完成的,但值得牢记。另外,我认为有一种叫做 UIViewControllerWrapperView... 据我所知,基本的UIViewController不会这样做,但是UINavigationController、UITabBarController等分层类型会这样做。 感谢刘大卫。我还发现在自定义 UIView 中覆盖 -(void)didAddSubview:(UIView *)subview 非常有用,因此自定义 UISplitViewController 可以通知其子 UIViewController viewDidAppear。

以上是关于编码自定义 SplitViewController - 我应该何时调用 viewWillAppear、viewDidAppear 等...?的主要内容,如果未能解决你的问题,请参考以下文章

iOS splitViewcontroller 的不同自定义视图控制器

在 SplitViewController 中弹出一个 ViewController

向弹出框的 uibarbuttonitem 添加自定义视图

拆分视图控制器 - 自定义 UITableViewCell

在自定义容器控制器中拆分视图控制器?

手把手教你Tableau自定义地理编码(十九)