我对在两次以编程方式实例化和打开新视图的尝试之间看到的不同结果感到有些困惑。我有一个由 NSTimer 回调调用的方法(尽管我认为这不是那么相关),它尝试分配和初始化第二个视图控制器,并将其推送到堆栈上(我可能有我的命名法离开那里,对不起)。
查看 ViewController Programming Guide 和一些答案,我已经确定了两个潜在的解决方案,它们都可以正常构建和运行,但是我得到了不同的结果,它们都不能完全工作。
第一个使用该presentViewController
方法。它看起来像这样:
SecondViewController *secondView = [[SecondViewController alloc] init];
[self presentViewController:secondView animated:YES completion:NULL];
……从某种意义上说,它起作用了。我在 SecondViewController 类的 viewDidLoad 方法中放置了一个 NSLog,它会打印出来。如果我还在那里以编程方式设置 UIColor,则屏幕颜色。但是,我在 Storyboard 中放置在此 VC 视图上的任何内容都不会显示 - 如果我不以编程方式为视图着色,则屏幕为黑色。
我尝试的第二种方法是因为我认为代码没有正确连接到我的 Storyboard(这是一种旧方法,仍然适用于 XIB 的 afaik)。它看起来像这样:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
SecondViewController *secondView = (SecondViewController *)
[storyboard instantiateViewControllerWithIdentifier:@"secondView"];
[self.navigationController pushViewController:secondView animated:YES];
...但 viewDidLoad 和界面似乎都没有响应/被调用。
我还研究了一种prepareForSegue
方法,但我不确定它是否会有所作为,因为我很确定我缺少一些东西......
我应该注意到我已经在 Identity Inspector 下设置了 ViewController 的 Storyboard ID。
如果有人可以解释我的问题的直接解决方案和/或我遇到的问题的更大解释,那将不胜感激。
〜杰西