编码自定义 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 的不同自定义视图控制器