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])上调用它,所以它不会工作。我不知道苹果为什么要做出这样的区分,但他们做到了。