我正在加载这样的视图:
if(commentSubmissionView == nil){
commentSubmissionView = [[CommentSubmissionController alloc] initWithNibName:@"CommentSubmissionView" bundle:nil];
}
[self.view addSubview:commentSubmissionView.view];
在commentSubmissionView中的viewDidLoad和viewWillAppear不会触发。还有什么我需要做的吗?
答案 0 :(得分:1)
如果您使用的是addSubview:
,那么您还需要使用bringSubviewToFront:
,如下所示:
if(commentSubmissionView == nil){
commentSubmissionView = [[CommentSubmissionController alloc] initWithNibName:@"CommentSubmissionView" bundle:nil];
}
[self.view addSubview:commentSubmissionView.view];
[self.view bringSubviewToFront:commentSubmissionView.view];
答案 1 :(得分:1)
viewWillAppear:
的文档并不完全清楚,但请看一下它的内容:
响应a调用此方法 视图直接添加或 间接到一个窗口。您添加视图 通过使用直接到窗口 addSubview:将它们添加到的方法 窗口的视图层次结构。你也可以 以多种方式间接添加视图, 包括把它推到一个 导航堆栈或通过呈现它 模态地(使用 presentModalViewController:动画: 方法)。之前调用此方法 视图实际上已添加到 窗口和任何动画之前 构造
只有在以下情况下才会调用viewDidAppear:
和viewWillAppear:
方法:
pushViewController:
或presentModalViewController:animated:
或在标签控制器中切换标签或Apple提供的视图控制器为您添加视图控制器及其视图的任何其他情况。在您要将视图添加到另一个视图的情况下,您必须自己在视图控制器上调用viewWillAppear:
和viewDidAppear:
,否则它们将不会发生。
我不知道为什么viewDidLoad
最初没有被你调用过。除非发生错误,否则在loadView
之后将始终在控制器上首次调用view
属性访问器时调用它。视图加载可能失败(您必须检查控制台日志)。
由于addSubview:
始终会添加到bringSubviewToFront:
,因此您无需关注addSubview:
addSubview:
。同样,来自{{1}}
向接收者的子视图添加视图 所以它显示在兄弟姐妹之上。
答案 2 :(得分:0)
viewDidLoad
和viewWillAppear
,commentSubmissionView
看起来像UIView子类。正如Matt所提到的,您可能想要推送/呈现视图控制器而不是仅添加子视图。