2

在我的 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 的背景颜色,以查看是否有东西在广场外,但整个东西都保持白色。感觉好像它没有使用我在情节提要中创建的视图,但是我已将其设置为正确的类,并且在调用它时会打印出 NSLog。我没有在 Storyboard 中以任何方式连接这两个视图,SecondViewController 只是浮动,所以这可能是问题吗?调用的按钮-(void)present是以编程方式创建的,所以我也不能按 ctrl+将它拖到按钮上。

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

4

2 回答 2

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];
    }
于 2013-01-08T00:48:07.740 回答
1

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

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

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

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

于 2013-01-08T00:49:57.437 回答