我的viewController没有显示正确

时间:2013-01-08 00:42:03

标签: ios ipad cocoa-touch uiviewcontroller uimodalpresentationstyle

在我的iPad应用程序中,我试图用模态表单样式呈现我的一个观点。 这是一些代码:

-(void)present
{
    SecondViewController *modal = [[SecondViewController alloc]init];
    modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
    [self presentModalViewController:modal animated:YES];
}

我正在使用Storyboard,我在我想要显示的视图中添加了textView和工具栏等内容。我在Identity Inspector中设置了正确的类,在类文件中,我检查了它是正确的视图,显示为NSLog(@"Right view");

当调用空白时,会出现一个视图,但只是一个暗白色的方块。我从Storyboard中获取的内容中没有任何内容,我甚至尝试更改视图的背景颜色和textView以查看某些内容是否在广场之外,但整个事物都保持白色。感觉它没有使用我在storyboard中创建的视图,但是我已经将它设置为正确的类,并且在调用它时会打印出NSLog。我没有在Storyboard中以任何方式连接这两个视图,SecondViewController只是浮动,所以这可能是问题?调用-(void)present的按钮是以编程方式创建的,因此我无法将其拖动到按钮上。

为什么它显示我的班级的空版本?

2 个答案:

答案 0 :(得分:3)

在“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];
    }

答案 1 :(得分:1)

你的问题是,你假设程序本质上知道在哪里可以找到已经布局的,这个控制器的视图,而这根本不是故事板的工作方式。您列出的代码将创建一个视图控制器,但如果没有关联的视图,它将只显示为黑色方块。

有几种方法可以解决你的困境:

  • 在视图控制器中将模态转换添加为segue,这将是最简单的方式,也是iOS故事板所期望的。
  • 将视图从情节提要移动到外部.xib,并调用initWithNibName:bundle:方法将其加载为视图控制器的视图。如果您只是想以编程方式加载视图,这是最佳解决方案。
  • 使用instantiateViewControllerWithIdentifier:方法以编程方式加载故事板中的视图,这可能是一个坏主意,因为它违背了故事板的设计。

如果你愿意,我可以详细说明。