我读过许多有关职位有问题的人viewWillAppear
,当你不创建视图层次只是权利.我的问题是我无法弄清楚这意味着什么.
如果我创建一个RootViewController
并调用addSubView
该控制器,我希望添加的视图可以连接起来viewWillAppear
事件.
有没有人有一个复杂的程序化视图层次结构的例子,成功地viewWillAppear
在每个级别接收事件?
Apple的Docs声明:
警告:如果属于视图控制器的视图直接添加到视图层次结构中,则视图控制器将不会收到此消息.如果向视图层次结构插入或添加视图,并且它具有视图控制器,则应直接向关联的视图控制器发送此消息.未能发送视图控制器此消息将阻止显示任何关联的动画.
问题是他们没有描述如何做到这一点."直接"是什么意思?你如何"间接"添加一个视图?
我对Cocoa和iPhone相当新,所以如果除了基本的Hello World垃圾之外还有来自Apple的有用示例,那将会很不错.
如果您使用导航控制器并设置其委托,则不会调用视图{Will,Did} {Appear,Disappear}方法.
您需要使用导航控制器委托方法:
navigationController:willShowViewController:animated: navigationController:didShowViewController:animated:
我遇到了同样的问题.在将其viewWillAppear
添加为子视图之前,只需向视图控制器发送消息即可.(有一个BOOL参数告诉视图控制器它是否被动画显示.)
[myViewController viewWillAppear:NO];
查看Metronome示例中的RootViewController.m.
(我实际上发现Apple的示例项目很棒.比HelloWorld更多;)
我终于找到了这个工作的解决方案!
UINavigationControllerDelegate
我认为它的要点是将你的导航控件的委托设置为它所在的viewcontroller,并实现UINavigationControllerDelegate
它的两种方法.辉煌!我很兴奋,我终于找到了解决方案!
我刚才有同样的问题.在我的应用程序中,我有2个导航控制器,并推动相同的视图控制器在每个工作在一个案例而不是在另一个案件.我的意思是当在第一个中推送完全相同的视图控制器时UINavigationController
,viewWillAppear
被调用但不是在第二个导航控制器中推送时.
然后我遇到这个帖子UINavigationController应该调用viewWillAppear/viewWillDisappear方法
并意识到我的第二个导航控制器确实重新定义了viewWillAppear
.筛选代码显示我没有打电话
[super viewWillAppear:animated];
我加了它,它工作了!
文件说:
如果重写此方法,则必须在实现中的某个时刻调用super.
我一直在使用导航控制器.当我想要下降到另一个级别的数据或显示我的自定义视图时,我使用以下内容:
[self.navigationController pushViewController:animated: ];
当我这样做时,我确实得到了viewWillAppear
解雇的功能.我认为这有资格作为"间接",因为我addSubView
自己并没有调用实际的方法.我不知道这是否100%适用于您的应用程序,因为我无法判断您是否使用导航控制器,但它可能会提供线索.