将控制器推送到 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