现在的位置: 主页 > 新闻中心 > 文章列表

iOS 扩展 UINavigationController 出栈返回到先前标记

作者:沈阳市沈河区金瑞龙美术社 来源:www.jrlgg.com 发布时间:2017-09-06 11:05:03
 

iOS 扩展 UINavigationController 出栈返回到先前标记的位置

这一功能,是突然想到去年看一个 Java 什么数据结构的原码时留下的印象,那里面就是一顿 mark,留标记,。。。都忘了

可是留下了莫名的火花儿,咱也不知道这是哪儿跟哪儿,就联系上了,

不过确实,就是那一瞬间脑袋里浮现了一下下那个 mark,才想起这样做的,无厘头哉?非也!

直接上代码,后附使用说明:

MarkNavigationController.h

#import @interface MarkNavigationController : UINavigationController @property (nonatomic, strong) NSMutableArray *markControllers; @property (nonatomic, weak) UIViewController *lastMarkController; - (void)popToMarkViewControllerAnimated:(BOOL)animated; - (void)mark; @end

MarkNavigationController.m

#import MarkNavigationController.h @interface MarkNavigationController () @end @implementation MarkNavigationController - (void)viewDidLoad { [super viewDidLoad]; self.markControllers = [[NSMutableArray alloc] init]; } #pragma mark - - (void)popToMarkViewControllerAnimated:(BOOL)animated { if (self.markControllers.count > 0) { [self.markControllers removeObject:self.lastMarkController]; [self popToViewController:self.lastMarkController animated:YES]; if (self.markControllers.count > 0) { self.lastMarkController = self.markControllers.lastObject; } else { self.lastMarkController = nil; } } } // 必须与上一方法匹配使用,避勉内存泄漏 - (void)mark { self.lastMarkController = self.viewControllers.lastObject; [self.markControllers removeObject:self.lastMarkController]; [self.markControllers addObject:self.lastMarkController]; } @end

在 push 前,先调用 mark,将当前视图控制器标记为最后一个出栈返回点,

之后无论 push 多少视图控制器到栈中,调用 - (void)popToMarkViewControllerAnimated:(BOOL)animated; 时,会自动出栈视图控制器直到最后标记的控制器。

实际上就是给导航控制器加了一个存储而已。

压栈前标记:

#pragma mark - NavigationBarButtonDelegate - (void)leftBarButtonPressed:(id)sender { NSLog(@leftBarButtonPressed); [self mark]; [self performSegueWithIdentifier:@SegueToGetClassCode sender:sender]; }

出栈返回到最后标记位置:

#pragma mark - - (IBAction)popToMarkButtonPressed:(id)sender { [self popToMarkViewControllerAnimated:YES]; }

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:潜江网站建设 http://qianjiang.45qun.com

  • 上一篇:服务器意外重启之后PHP-FPM不能启动
  • 下一篇:最后一页
  •