为viewWillAppear:
的文档并不完全清楚,但看看它说:
调用此方法是为了响应直接添加的 视图或将 间接添加到窗口。您可以直接使用 addSubview:方法将视图 添加到窗口的视图层次结构中,从而将视图 添加到窗口中。也可以间接地 添加的图在几个方面, 包括推到 导航堆栈或通过呈现它 模态(使用 presentModalViewController:动画: 方法)。在 之前调用此方法,该视图实际上已添加到 窗口中,并且在配置了任何动画 之前。
的viewDidAppear:
,如果你是viewWillAppear:
方法才会被调用:
- 它们添加到一个窗口(添加到视图不计 - 它必须是一个窗口)
- 使用
pushViewController:
或presentModalViewController:animated:
或在选项卡控制器中切换选项卡或Apple提供的视图控制器为您添加视图控制器及其视图的任何其他情况。
在你的情况,你在哪里添加视图到另一个视图,您必须对视图调用viewWillAppear:
和viewDidAppear:
控制器自己或他们将不会发生。
我不知道为什么viewDidLoad
最初没有被调用。在loadView
之后,当第一次在控制器上调用view
属性访问器时,将始终调用它,除非发生错误。有可能视图加载失败(你必须检查控制台日志)。
你不需要关注addSubview:
与bringSubviewToFront:
因为addSubview:
总是增加到前面。再次,从addSubview:
的文档添加一个视图到接收器的子视图 所以它的上面它的兄弟姐妹显示。
谢谢。在#1中,你说“...添加到视图不会计数...”然而文档指出,“您可以直接使用addSubview:方法将视图添加到窗口中......”。由于我使用addSubview,该方法应该触发正确? – 4thSpace 2010-03-22 21:36:07
addSubview:只会导致viewDidAppear:和viewWillAppear:如果您调用addSubview:在窗口(即[window addSubview:newView])上触发。由于您在视图上调用它(即[view addSubview:newView]),它将不起作用。我不知道为什么苹果有这样的区别,但他们有。 – 2010-03-25 05:42:50