segue加载viewcontroller但不显示它

时间:2012-01-05 16:41:05

标签: objective-c ios storyboard

从iPad应用程序中的代码调用segue时,显示View Controller时出现问题。

我通过使用

从一个视图控制器拖动到另一个视图控制器,在IB中设置了segue

标识符: viewDocumentSegue ,样式:模态,演示文稿:默认,转换:默认

然后我使用

从第一个视图控制器调用segue
[self performSegueWithIdentifier:@"viewDocumentSegue" sender:nil];

并使用

将变量传递给第二个视图控制器
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIViewController *destination = segue.destinationViewController;

    if ([destination respondsToSelector:@selector(setFileURL:)]) {
        [destination setValue:fileName forKey:@"fileURL"];
    }
}

第二个视图控制器确实已加载,因为我在控制台中显示 viewDidLoad viewWillAppear viewDidAppear 中的NSLog,但没有显示任何内容。

我认为第二个视图控制器的视图位于视图中的某个位置。但是我如何强迫它到顶部?

修改

这是界面的截图(有些东西需要涂黑)。我添加了一些解释结构的注释。希望它会有所帮助。

(我无法上传图片所以这里是链接) http://www.linfoots.com/Screenshot.jpg

有什么建议吗?

谢谢,

理查德

1 个答案:

答案 0 :(得分:2)

您没有提供我要求的其他信息,因此无法详细回答您的问题。我建议你做的是用一个只有两个视图控制器来创建一个全新的项目。以相同的方式在故事板中连接它们。你会发现你想要做的事实上应该工作得很好。一旦你确信了这一点,你就可以回过头来看看你遇到麻烦的项目有什么不同。

编辑:

好的,谢谢你的屏幕截图。看起来你正在尝试使用与父视图控制器相关的故事板,正如我在第二条评论中所猜测的那样。这并不容易,因为故事板对您的父视图控制器的子项一无所知。使用多个故事板,或者根本没有故事板,你会更开心。

现在我们来讨论使用父视图控制器的问题。你没有问过这个,但它可能是你问题的核心。您正确管理子视图控制器至关重要。请参阅我的书中的讨论:

http://www.apeth.com/iOSBook/ch19.html#_container_view_controllers

每次必须做这种精心制作的舞蹈,否则事情就不会正确:

当视图控制器成为父视图控制器的子节点时:

  • 在父视图控制器上调用addChildViewController :.子节点会自动添加到父节点的childViewControllers数组中,该数组会保留它。
  • 您可以将子视图控制器的视图添加到您的界面中,如果这是添加子视图控制器的意思。
  • 您将didMoveToParentViewController:发送给子视图控制器作为其参数。

当视图控制器停止成为父视图控制器的子节点时:

  • 将willMoveToParentViewController:发送给具有nil参数的子项。
  • 您可以从界面中删除子视图控制器的视图,如果这是删除子视图控制器的意思。
  • 您将removeFromParentViewController发送给孩子。子进程将从父进程的childViewControllers数组中自动删除,该数组将释放它。

最后,当您进行模态转换时,父链中的definesPresentationContext变得至关重要,以便模态视图知道接口中要替换的视图。我书中的这个可下载的例子展示了必要的区别:

https://github.com/mattneub/Programming-iOS-4-Book-Examples/tree/master/convertedToIOS5/p476containerController2