温馨提示:本文翻译自stackoverflow.com,查看原文请点击:iphone - UIViewController -viewDidLoad not being called

iphone - UIViewController -viewDidLoad没有被调用

发布于 2020-04-03 23:29:18

作为新的可可,我遇到的几个问题Interface BuilderUIViewController和朋友。

我有一个在xib中定义UIViewController子类UIView,并且控制器的视图出口连接到该视图。xib的“文件所有者”被设置为myViewcontroller子类。

在这种情况下,以下代码(从主视图控制器)加载控制器/视图的代码无法正常工作:

if ( self.myViewController == nil )
{
    self.myViewController = [[MyViewController alloc]
        initWithNibName:@"MyViewController" bundle:nil];
}

[self.navigationController 
    pushViewController:self.myViewController animated:YES];

在MyViewController的方法中,我放置了断点和日志消息以查看发生了什么:

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        NSLog(@"initWithNibName\n");
    }

    return self;
}

-(void)viewDidLoad {

    [super viewDidLoad];
    NSLog(@"viewDidLoad\n");
}

预期结果

这两个-initWithNibName-viewDidLoad方法被调用,并显示myViewController的观点。

观察结果

-initWithNibName被调用,视图不显示。

我错过了什么吗?任何人都可以推荐检查的东西吗?(尤其是在不透明的Interface Builder工具中)。

查看更多

提问者
Justicle
被浏览
18
2017-05-23 19:54

好吧,我有一个部分的答案-也许大师可以解释更多。问题是:

[self.navigationController pushViewController:myViewController animated:YES];

仔细观察,在这种情况下self.navigationController为零-因此,推送消息无处可去。

相反,如果我发送:

[self.view addSubview:self.myViewController.view];

然后该视图出现并被-viewDidLoad调用。

我不完全确定为什么self.navigationController没有在这种情况下设置-我唯一能想到的是它self的子类UIViewController而不是UITableViewControllerpushViewController代码来自何处)。

同样,静默地让消息变为零似乎是一个坏主意,尽管这些答案 并非如此。另见我的问题在这里

最终编辑:

在下面的评论中,我已经意识到我实际想要的显示功能(给定myViewController是模态的)是:

[self presentModalViewController:myViewController animated:YES];

感谢每个人的帮助。