实际开发中,经常有一次pop多层页面的需求,每次判断是在太麻烦了,于是我为UINavigationController写了一个Extension。纯粹的干货,可以复制粘贴使用。
.h 文件
@interface UINavigationController (Extension)
/** pop到指定的控制器 指定目标控制器的类名即可*/
- (void)popToViewControllerWithClassName:(NSString *)className animated:(BOOL)animated;
/** pop多次 指定pop几层即可 count:层数*/
- (void)popViewControllerWithCount:(NSInteger)count animated:(BOOL)animated;
@end
.m 文件
@implementation UINavigationController (Extension)
- (void)popToViewControllerWithClassName:(NSString *)className animated:(BOOL)animated{
for (UIViewController *VC in self.childViewControllers) {
if ([VC isKindOfClass:NSClassFromString(className)]) {
[self popToViewController:VC animated:animated];
return;
}
}
[self popToRootViewControllerAnimated:animated];
}
- (void)popViewControllerWithCount:(NSInteger)count animated:(BOOL)animated{
count = MAX(count, 1);
NSInteger totalCount = self.childViewControllers.count;
NSInteger index = MAX(totalCount-count-1, 0);
UIViewController *VC = self.childViewControllers[index];
[self popToViewController:VC animated:animated];
}
@end
下篇将贴出dismiss到指定控制器或dismiss多层presentingViewController的方法