【问题标题】:iOS7 how to add a UINavigationController to a nib?iOS7如何将UINavigationController添加到笔尖?
【发布时间】:2014-05-03 07:09:14
【问题描述】:

好的,我有一个带有按钮的视图控制器。当按下该按钮时,我有另一个将以模态方式呈现的视图控制器。我想将该视图控制器嵌入到导航控制器中,但这不能以编程方式完成,导航控制器需要在 xib 中。

在我的 xib 中,我有两个对象:导航控制器和一个包含所有视图控制器内容的视图对象。导航控制器的视图控制器将其视图属性设置为我的视图对象。

我的问题是,在我的父视图控制器中,我试图用这段代码呈现模态

self.modalController = modalController.new;
self.modalController.delegate = self;
[self presentViewController:self.modalController animated:YES completion:NULL];

然后我得到了这个崩溃:

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <ParentController: 0xXXXXXXXX>.'

这让我很困惑,我似乎无法弄清楚如何通过它。我知道这可以通过以编程方式设置导航控制器来实现,但我不能使用该路由来解决这个问题。有什么想法吗?

【问题讨论】:

  • 查看一些基础教程,它非常基础。检查这个link
  • self.modalController = modalController.new; - 此语法无效。应该是self.modalController = [YourModalControllerClass new];。我还发现使用UINavigationController 最容易以编程方式(或通过情节提要)进行。为什么你必须使用 xib?
  • 由于我项目中的其他设置元素,恐怕它在 xib 中是目前唯一的选择。它只是令人沮丧,因为我知道这就像你说的那样以编程方式工作。
  • 在情节提要中使用情节提要 ID 来实例化WithStoryboardId 方法。

标签: ios objective-c xcode ios7


【解决方案1】:

我无法从 xib 文件中成功实例化任何 UIViewController 类(或子类)。 Interface Builder 中存在这些对象的唯一原因是在 Storyboard 中使用。你必须想办法在代码中做到这一点。您始终可以在 xib 中创建 UIView,然后将视图控制器的视图设置为从 xib 加载的视图。有几种不同的方法可以做到这一点...

NSString *aNibName = @"customNibName";
MyViewController* myViewController = [[MyViewController alloc] initWithNibName:aNibName bundle:nil];
[navigationController pushViewController:myViewController];  

确保将在 Interface Builder 中创建的 View 的 File's Owner 设置为 UIViewController 子类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多