Iphone 查看加载方法不触发
我正在加载这样的视图:Iphone 查看加载方法不触发,iphone,cocoa-touch,uiview,uiviewcontroller,Iphone,Cocoa Touch,Uiview,Uiviewcontroller,我正在加载这样的视图: if(commentSubmissionView == nil){ commentSubmissionView = [[CommentSubmissionController alloc] initWithNibName:@"CommentSubmissionView" bundle:nil]; } [self.view addSubview:commentSubmissionView.view]; viewDidLoad和ViewWill将出现在comme
if(commentSubmissionView == nil){
commentSubmissionView = [[CommentSubmissionController alloc] initWithNibName:@"CommentSubmissionView" bundle:nil];
}
[self.view addSubview:commentSubmissionView.view];
viewDidLoad和ViewWill将出现在commentSubmissionView中。请勿激发视图。还有什么我需要做的吗?如果您使用的是
添加子视图:
,那么您还需要使用将子视图带到前面:
,如下所示:
if(commentSubmissionView == nil){
commentSubmissionView = [[CommentSubmissionController alloc] initWithNibName:@"CommentSubmissionView" bundle:nil];
}
[self.view addSubview:commentSubmissionView.view];
[self.view bringSubviewToFront:commentSubmissionView.view];
视图的文档将出现:
不完全清楚,但请查看它的内容:
调用此方法是为了响应
直接或直接添加的视图
间接地贴在窗户上。您可以添加视图
通过使用
addSubview:将它们添加到
窗口的视图层次结构。你也可以
以多种方式间接添加视图,
包括把它推到一个
导航堆栈或显示它
modally(使用
presentModalViewController:动画:
方法)。此方法在之前被调用
该视图实际上已添加到
在创建任何动画之前
配置
视图显示:
和视图将显示:
方法仅在以下情况下才会被调用:
pushViewController:
或presentModalViewController:animated:
或在选项卡控制器中切换选项卡,或在Apple提供的视图控制器为您添加视图控制器及其视图的任何其他情况下viewwillbeen:
和viewdidebeen:
,否则它们不会发生
我不知道为什么最初没有为您调用viewDidLoad
。在控制器上第一次调用视图
属性访问器时,它将始终在加载视图
之后调用,除非发生错误。视图加载可能失败(您必须检查控制台日志)
您不需要跟随addSubview:
和bringsubview tofront:
,因为addSubview:
总是添加到前面。同样,从addSubview:
将视图添加到接收器的子视图中
所以它显示在它的兄弟姐妹上面
在UIViewController子类上调用了
viewDidLoad
和ViewWillDisplay
,commentSubmissionView
看起来像UIView子类。正如Matt提到的,您可能希望推送/呈现视图控制器,而不是仅仅添加子视图。这将引发此异常:“NSInvalidArgumentException”,原因:“***-[UIView makeKeyAndVisible]:未识别的选择器发送到实例0x352550'您也可以显式调用viewDidLoad和friends,尽管这会带来忘记它的风险,并且在将来会让它们被奇怪地调用。viewDidLoad现在会触发,但ViewWill不会出现。你知道为什么吗?谢谢。在#1中,您说“…添加到视图不算数…”但文档指出,“您可以使用addSubview:方法直接将视图添加到窗口…”。由于我使用的是addSubview,因此该方法应正确触发?addSubview:仅在调用窗口(即[window addSubview:newView])上的addSubview:时触发ViewDidDisplay:和ViewWillDisplay:。因为您是在视图(即[view addSubview:newView])上调用它,所以它不会工作。我不知道苹果为什么要做出这样的区分,但他们做到了。