思路:1.替换UINavigationController的pushVC方法。
打印消失页面导航控制器的所有子控制器(或用其他方法确定消失页面所在的navivc)。
2.就是下面写的关于导航控制器setviewControllers一系列方法
继承于UINavigationController,我们创建一个子类YYYNaviController。
然后其他页面都使用这个YYYNaviController initRoot。
初级
重新实现下面父类pop方法。有可能有些页面偷偷的执行了pop
- (UIViewController *)popViewControllerAnimated:(BOOL)animated{
UIViewController *vv = [super popViewControllerAnimated:animated];
return vv;
}
- (NSArray<UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated{
NSArray *vs = [super popToRootViewControllerAnimated:animated];
//nil ?
return vs;
}
- (NSArray<UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated{
return [super popToViewController:viewController animated:animated];
}
中级
对属性下手,重写set get
@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers; // The current view controller stack.
-(void)setViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers{
[super setViewControllers:viewControllers];
}
- (NSArray<UIViewController *> *)viewControllers{
return [super viewControllers];
}
高级
重写这个方法
- (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers animated:(BOOL)animated NS_AVAILABLE_IOS(3_0); // If animated is YES, then simulate a push or pop depending on whether the new top view controller was previously in the stack.
检测方法:重写方法 & 去掉实现代码
- (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers animated:(BOOL)animated{
//去掉就不行了
}