Objective c 继续加载viewcontroller,但不显示它

Objective c 继续加载viewcontroller,但不显示它,objective-c,ios,storyboard,Objective C,Ios,Storyboard,在iPad应用程序中调用segue from代码时,我在显示视图控制器时遇到问题 我在IB中通过Ctrl键将segue设置从一个视图控制器拖动到另一个视图控制器 标识符:viewDocumentSegue,样式:模式,演示:默认,转换:默认 然后我从第一个视图控制器调用segue,使用 [self performSegueWithIdentifier:@"viewDocumentSegue" sender:nil]; - (void) prepareForSegue:(UIStoryboard

在iPad应用程序中调用segue from代码时,我在显示视图控制器时遇到问题

我在IB中通过Ctrl键将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"];
    }
}
以及使用将变量传递给第二视图控制器

[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 view中的nslog会出现在控制台中,而viewdidappeage会出现在控制台中,但不会显示任何内容

我认为第二个视图控制器的视图在视图层次结构中的某个位置。但我该如何把它推到顶端呢

编辑

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

(我还不能上传图片,这里有一个链接)

有什么建议吗

谢谢


Richard

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

编辑:

好的,谢谢你的屏幕截图。看起来您正试图将情节提要与父视图控制器结合使用,正如我在第二条评论中所猜测的那样。这并不容易,因为故事板对父视图控制器的子视图一无所知。使用多个故事板,或者根本不使用故事板,你会更快乐

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

你必须每次都跳这种精巧的舞蹈,否则事情就不对劲了:

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

  • 在父视图控制器上调用addChildViewController:。子对象将自动添加到父对象的ChildViewController数组中,该数组将保留它
  • 如果添加子视图控制器的意思是将子视图控制器的视图添加到界面中,则可以将其添加到界面中
  • 将didMoveToParentViewController:发送给以父视图控制器为参数的子级
当视图控制器不再是父视图控制器的子视图控制器时:

  • 将willMoveToParentViewController:发送给具有nil参数的子级
  • 如果删除子视图控制器意味着从界面中删除子视图控制器的视图,则可以删除该视图
  • 将removeFromParentViewController发送给子级。子对象将自动从父对象的ChildViewController数组中删除,从而释放它
最后,当您进行模式转换时,父链中的
definesPresentationContext
变得至关重要,以便模式视图知道要在接口中替换哪个视图。我书中的这个可下载示例演示了必要的区别:


是iPhone还是iPad?什么是相关的模态表示和模态上下文设置?你说“堆栈”-这一切都发生在导航控制器内吗?对不起,我应该说得更具体些。我编辑了原稿。这是一个iPad应用程序,我应该说视图层次结构不是堆栈。我认为模态演示是在故事板和segue框架中处理的。我对故事板还不熟悉,所以还在努力适应。好吧,现在我们知道你在iPad上。还有什么?您是否在自定义父视图控制器中?描述故事板或显示其屏幕截图。没有人能从你所说的话中重现这个问题。谢谢你的耐心,马特。现在,我添加了一个屏幕截图,其中包含一些正在发生的事情的注释。我还采纳了你的建议,创建了一个包含相关视图控制器和UI元素的新项目来复制这个应用程序,它工作得非常好。所以我将把这个应用程序剥离到最基本的部分,看看我是否能找到罪犯。谢谢马特,这帮了大忙。我现在有了一个实际运行的应用程序:)无论如何,由于子视图控制器的实现似乎过于复杂,我已经将它们从应用程序中删除,并以模式显示每个视图,无论是否动画。最后,它实际上使整个界面更加简单,这只能是一件好事。我已经看过你的iOS5版本的书了,它看起来比我现在拥有的书要全面得多,并且在发行时一定会买一本。再次感谢你的帮助。很高兴我能帮上忙,但当然你必须做所有的工作。:)对我来说,我给出的最重要的建议是“做一个简单的项目”。我一直在使用这种技术,向自己展示在不增加实际应用程序复杂性的情况下,一些东西应该如何工作。这本书既快又简单,但很少有人尝试。@matt这不是为matt的书做广告的地方,但事实上,在阅读了大约50本iOS主题的书之后,这本书是最好的。它帮助我澄清了iOS最重要的部分,尤其是视图控制器概念的基础。