UINavigationController '菜单'
Posted
技术标签:
【中文标题】UINavigationController \'菜单\'【英文标题】:UINavigationController 'menu'UINavigationController '菜单' 【发布时间】:2011-05-12 12:21:57 【问题描述】:我正在尝试创建一个“书本风格”界面。我有一个 plist,其中包含一个数组,告诉我哪个视图控制器是下一个“页面”。所以我检查一下,将页面推送到堆栈上并用 plist 中的信息填充它。
不过,我还需要一个“菜单”按钮,以便用户可以在页面之间快速跳转。这很简单,但是如果用户例如从第 1 页跳转到第 3 页,然后使用后退按钮,它显然会弹回第 1 页。不过,我需要它弹出第 2 页。
实现这一目标的最佳方法是什么?我试过 popToViewContorller: animated: 但收到错误消息,告诉我我试图弹出的 vc 不存在。
【问题讨论】:
【参考方案1】:好的,你需要什么来推送每个页面以达到你想要的页面意味着
假设您想从 1 页转到 4 页,那么您需要根据您的查看编号设置一个整数变量(使其成为应用委托类中的属性)。 然后根据您的 plist 推送下一个视图,然后检查您想要的页面(通过检查您保存在属性中的页码和当前页码)。如果是,则保留在那里,否则推送另一个。(这将完成每个页面的 viewDidLoad)。
记住,当你得到你想要的页面时,然后将该 bool 变量设置为 NO;
为了管理页码,在 plist 中再添加一件事,那就是页码,然后制定你的逻辑。
【讨论】:
我正在尝试您的方法,但不断收到错误消息:“尝试弹出到不存在的视图控制器”。我显示视图 1,推送视图 2,然后当我尝试弹回视图 1 时出现错误。 这是因为当我尝试将我的 init/alloc 放入我想要弹出的视图的新实例时?我之前应该在我的应用委托中创建所有视图吗? 好的,问题解决了。我需要在应用程序委托中创建所有视图控制器并弹出这些引用。谢谢。 很抱歉回复晚了,但现在你用你干净的奉献精神得到了解决,所以干杯。【参考方案2】:我不认为你可以通过 poppingViewControcollers 来做到这一点。它在你的 navigationController.viewControllers 数组中你只会在零索引处拥有 page1,在 1 索引处拥有 page3。当你执行 popToViewContorller: 动画时:它会将你带到上一个 navigationController viewController 加载它就像在你的情况下它的第 1 页是在第 3 页之前加载的。
【讨论】:
谢谢。我明白这就是问题所在。如何让第 2 页在中间加载,以便我可以弹回它?有没有办法让我提前告诉 navigationcontroller 它的所有视图控制器?【参考方案3】:也许你想要的根本不是UINavigationController
?它旨在管理一堆视图控制器,但你想要的是一个控制器列表。
您可以创建自己的 UIViewController
自定义子类,用于管理一组子视图控制器,并使用来自托管视图控制器的视图填充 UIScrollView
。
这样UIScrollView
可以:
contentOffset
。
你说你有一个 plist 中的所有视图控制器,所以它们不能太多。因此无需担心托管视图控制器的动态创建和复杂的生命周期管理。
【讨论】:
以上是关于UINavigationController '菜单'的主要内容,如果未能解决你的问题,请参考以下文章
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller
带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?
UINavigationController 与 AppDelegate 中的 UISegmentedControl 切换 UINavigationController 的 rootviewcontr
从一个 UINavigationController 到另一个 UINavigationController (Swift iOS 9, xcode 7)