我的 viewController 没有正确显示
Posted
技术标签:
【中文标题】我的 viewController 没有正确显示【英文标题】:My viewController doesn't show up right 【发布时间】:2013-01-08 00:42:03 【问题描述】:在我的 iPad 应用程序中,我试图以模态表单样式呈现我的观点之一。 这是一些代码:
-(void)present
SecondViewController *modal = [[SecondViewController alloc]init];
modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
[self presentModalViewController:modal animated:YES];
我正在使用 Storyboard,并且我已将 textView 和工具栏之类的东西放在我想显示的视图中。我已经在 Identity Inspector 中设置了正确的类,并且在类文件中我检查了它是否是正确的视图,其中出现了 NSLog(@"Right view");
当调用 void present 时,会出现一个视图,但只是一个深白色的正方形。我的 Storyboard 中没有任何内容,我什至尝试更改视图和 textView 的背景颜色以查看是否有东西在广场外,但整个东西都保持白色。感觉好像它没有使用我在情节提要中创建的视图,但我已将其设置为正确的类,并且在调用它时会打印出 NSLog。我没有在 Storyboard 中以任何方式连接这两个视图,SecondViewController 只是浮动,所以这可能是问题吗?调用-(void)present
的按钮是通过程序创建的,所以我也不能按Ctrl+拖动它。
为什么它显示的是我的类的空版本?
【问题讨论】:
【参考方案1】:在“Identity Inspector”中为您的 ViewController 设置一个“Storyboard ID”,然后像这样呈现它:
-(void)present
SecondViewController *modal = [self.storyboard instantiateViewControllerWithIdentifier:@"myStoryboardID"];
modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
[self presentModalViewController:modal animated:YES];
如果你使用的是 ios6,presentModalViewController:animated:
已被弃用,所以使用这个:
-(void)present
SecondViewController *modal = [self.storyboard instantiateViewControllerWithIdentifier:@"myStoryboardID"];
modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
[self presentViewController:modal animated:YES completion:nil];
【讨论】:
【参考方案2】:你的问题是你假设程序本质上知道在哪里可以找到这个控制器的已经布局的视图,而故事板根本不是这样工作的。您列出的代码将创建一个视图控制器,但如果没有关联的视图,它只会显示为黑色方块。
有几种方法可以解决您的困境:
在视图控制器中添加模态转换作为转场,这是最简单的方法,也是 iOS 故事板希望您执行的操作。 将视图从情节提要移动到外部.xib
并调用initWithNibName:bundle:
方法将其加载为视图控制器的视图。如果您只想以编程方式加载视图,这是最佳解决方案。
使用instantiateViewControllerWithIdentifier:
方法以编程方式从情节提要中加载视图,这可能是个坏主意,因为它违背情节提要的设计。
如果你愿意,我可以详细说明。
【讨论】:
以上是关于我的 viewController 没有正确显示的主要内容,如果未能解决你的问题,请参考以下文章
Ionic - 如何正确导入 ViewController? - 未捕获(承诺):错误:没有 ViewController 的提供者
从 SceneDelegate 获取 viewController 实例化的错误