我正在开发一个使用基于 NavigationController 的 Storyboard 的应用程序,但导航由 segmentedControl 控制。这样我可以多次迭代 x 菜单,然后我可以回去大约一年:D
我的问题是:如何覆盖 NavigationController 的推送方法以检查堆栈中是否已经存在一个实例并重用它而不再次将相同的实例添加到堆栈中?先感谢您!
我正在开发一个使用基于 NavigationController 的 Storyboard 的应用程序,但导航由 segmentedControl 控制。这样我可以多次迭代 x 菜单,然后我可以回去大约一年:D
我的问题是:如何覆盖 NavigationController 的推送方法以检查堆栈中是否已经存在一个实例并重用它而不再次将相同的实例添加到堆栈中?先感谢您!
子类化UINavigationController
并实现子类中的pushViewController:animated:
方法。self.viewControllers
在那里,您可以通过调用which 返回堆栈NSArray
上的视图控制器来遍历堆栈。在那里您可以检查您尝试推送的控制器是否已经被推送过。如果没有,请致电[super pushView...]
。如果有,则创建堆栈的可变副本NSMutableArray * newStack = [self.viewControllers mutableCopy]
并将所需的视图控制器移动到数组的末尾。一旦你有了它,只需调用[super setViewControllers:newStack animated:...]
which 手动设置你的新堆栈。
不过,我认为您不需要覆盖该popViewController
方法。
哦,一旦你有了它,不要忘记将UINavigationController
Storyboard 中的类更改为导航控制器的子类的名称。
另一个想法 - 如果您使用分段控件,您是否考虑过使用UITabBarController
而不是UINavigationController
导航?