将控制器推送到 UINavigationController 在 iPad 上工作,但在 iPhone 上不工作

Posted

技术标签:

【中文标题】将控制器推送到 UINavigationController 在 iPad 上工作,但在 iPhone 上不工作【英文标题】:pushing a controller to UINavigationController work on iPad but not on iPhone 【发布时间】:2013-01-21 12:15:06 【问题描述】:

我在为 iPad 和 iPhone 开发应用程序时遇到了一个非常烦人的问题。

我希望我的导航控制器(由故事板设置)推送一个显示一些详细信息的视图控制器。

以下代码曾经有效,但现在我在 iPhone 上推动控制器时遇到黑屏,而完全相同的代码在 iPad 上可以正常工作。所有使用的控制器都是非零值。发生的情况是显示了使用 navigationController 更改视图的通常动画,但之后只有黑屏。

ADetailViewController* detailController =
    [self.storyboard instantiateViewControllerWithIdentifier:@"ADetailViewController"];
    exposeController.data = aRealEstate;
    exposeController.appData = self.appData;
    [self.navigationController pushViewController: detailController animated:YES];

我对代码进行了一些调试,发现调用了 ADetailViewController 类的 viewDidLoad,但没有调用 viewDidAppear,这意味着显示了详细信息视图(我也通过黑屏注意到 :-))

我会很感激这个问题的一种提示。

更新

我设法自己解决了这个问题。造成这种情况的原因是我在委托依赖项中构建了一个循环依赖项。这用于在 rootView 将要隐藏时弹出推送的视图。

【问题讨论】:

【参考方案1】:

您正在使用情节提要,那么为什么不使用 segue?

视图控制器的所有实例化都是通过执行 segue 来处理的。您可以在prepareForSegue: 中方便地进行所有自定义。

我相信您的错误是由 iPhone 和 iPad 故事板中的不同配置引起的。如果您决定使用 segue,则推送视图控制器的过程会更加透明,您将能够更轻松地找到问题。

【讨论】:

感谢您的提示。事实上,现在代码感觉更好了,我正在使用手动 segues 进行控制器之间的转换。不幸的是,这对“黑屏”问题没有任何作用。 不幸的是,导航控制器不显示我推送的任何视图的问题并没有帮助。 好吧,然后编辑您的问题并在prepareForSegue: 中显示您的代码。【参考方案2】:

我有两个建议给你:

    您是否尝试过清理您的项目? 也许ADetailViewController 标识符不是UIViewController,这可能是因为标识符存储在 iPhone 情节提要的错误字段中。

祝你好运

【讨论】:

您好,谢谢您的回答。我多次清理了该项目,并从设备中删除了该应用程序。 ADetailViewController 是一个 UITableViewController。控制器的初始化和加载按预期执行(我在其中调试...)。

以上是关于将控制器推送到 UINavigationController 在 iPad 上工作,但在 iPhone 上不工作的主要内容,如果未能解决你的问题,请参考以下文章

我可以将视图控制器推送到后端的 UINavigationController

为啥需要将 django 迁移推送到版本控制系统

快速将 UIImage 推送到下一个视图控制器

如何将多个视图控制器推送到导航控制器上

从弹出窗口将 UIViewController 推送到 UINavigationController

ios Storyboard - 将标题推送到视图控制器上