如何在 iOS 中顺序显示控制器(作为队列,而不是堆栈)?
How to sequentially show controllers in iOS (as a queue, not a stack)?
想象一个显示问题列表的应用程序,每个问题都有一个与特定 UIViewController
关联的类型(因此应用程序支持的每种问题类型都有多个 UIViewController
对象) .用户无法返回到之前回答过的问题。我想向每个控制器展示 pushViewController
方法给出的相同效果。
关键是。应用程序可能会提出大量问题,因此将所有这些 UIViewController
对象保存在内存中不是一个可行的选择。因为没有返回到先前回答的问题的选项,所以该应用程序只需要跟踪显示的最后两个问题(为了动画目的,当当前问题显示在前一个问题之上时)。
关于如何在 Swift 中实现它的任何建议? (如果以后可以将其转换为 Swift,我也可以使用 ObjectiveC
解决方案)。
将 UINavigationController 子类化,然后将导航控制器的委托设置为其自身,然后在显示控制器时,从堆栈中移除除正在显示的控制器之外的所有其他控制器。这样,您的导航控制器在任何时候都将只有一个视图控制器,您将无法弹出而只能推送视图控制器。
这是一个小样本,
class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
// MARK: UINavigationControllerDelegate
func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
self.viewControllers = [viewController]
}
}
然后,将所有视图控制器推送到此视图控制器中。这应该可以做到。
想象一个显示问题列表的应用程序,每个问题都有一个与特定 UIViewController
关联的类型(因此应用程序支持的每种问题类型都有多个 UIViewController
对象) .用户无法返回到之前回答过的问题。我想向每个控制器展示 pushViewController
方法给出的相同效果。
关键是。应用程序可能会提出大量问题,因此将所有这些 UIViewController
对象保存在内存中不是一个可行的选择。因为没有返回到先前回答的问题的选项,所以该应用程序只需要跟踪显示的最后两个问题(为了动画目的,当当前问题显示在前一个问题之上时)。
关于如何在 Swift 中实现它的任何建议? (如果以后可以将其转换为 Swift,我也可以使用 ObjectiveC
解决方案)。
将 UINavigationController 子类化,然后将导航控制器的委托设置为其自身,然后在显示控制器时,从堆栈中移除除正在显示的控制器之外的所有其他控制器。这样,您的导航控制器在任何时候都将只有一个视图控制器,您将无法弹出而只能推送视图控制器。
这是一个小样本,
class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
// MARK: UINavigationControllerDelegate
func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
self.viewControllers = [viewController]
}
}
然后,将所有视图控制器推送到此视图控制器中。这应该可以做到。