UINavigationController 中的 UIScrollView 中的 UIViewController 想要推送新的控制器

Posted

技术标签:

【中文标题】UINavigationController 中的 UIScrollView 中的 UIViewController 想要推送新的控制器【英文标题】:UIViewController in a UIScrollView in a UINavigationController wants to push a new Controller 【发布时间】:2012-10-18 08:43:58 【问题描述】:

我们的一个应用程序现在遇到了一个愚蠢的 UI 问题。

我从 UINavigationController 开始,它是我的 Storyboard 中的初始视图控制器。根视图控制器是一个 UIViewController 巫婆一个 UIScrollView 作为子视图。 UIScrollView 本身已启用分页并包含多个 UIViewControllers。

现在这是我的问题:UIScrollView 中的 UIViewControllers(我们称它们为 View #1)应该对按钮事件做出反应,并与另一个需要从前一个 UIViewController 获取数据的 UIViewController(View #2)进行segue 和需要通过委托方法发回数据。

当我尝试获取 UINavigationController 并在其上推送 View #2 时,没有任何反应。通过 presentViewController 显示它当然可以。

你能帮我一下吗,告诉我这不起作用,什么时候不起作用?我有点卡在这一点上,我不知道如何继续。

【问题讨论】:

+1 表示好的过程图 :) 谢谢...只是想让场景更清楚:) 【参考方案1】:

不要将 UIViewControllers 放在另一个违反苹果开发指南的 UIViewController(至少在 ios5 之前)中。 UIViewControllers 的生命周期是内部管理的,如果你直接将 UIViewController 添加为子视图,很多方法,如

viewDidLoad viewWillAppear viewDidAppear . . .

不会被调用,根据我的经验会导致非常不稳定的行为

尝试使用自定义 UIView 对象来获取每个视图的内部逻辑 同意这在一定程度上打破了 MVC 模式,但这将是解决您的问题的最佳方式

但 iOS 5.0 添加了包含 UIViewControllers 的容器,它通过添加子视图控制器来正确处理这些生命周期事件。因此,如果您只针对发布 iOs 5 设备,这可能是解决此问题的好方法

看看this和this

【讨论】:

以上是关于UINavigationController 中的 UIScrollView 中的 UIViewController 想要推送新的控制器的主要内容,如果未能解决你的问题,请参考以下文章

(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换

UINavigationController 中的常量 UIBarButtonItem

UINavigationController 中的 setAlpha

UINavigationController:调整大小动画中的标题跳转

UIPopoverController 中的 UINavigationController:设置标题

UITabBarController 问题中的 UINavigationController