博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 扩展 UINavigationController 出栈返回到先前标记的位置
阅读量:6808 次
发布时间:2019-06-26

本文共 2029 字,大约阅读时间需要 6 分钟。

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];}

转载地址:http://fthwl.baihongyu.com/

你可能感兴趣的文章
深入BUG分析
查看>>
销售灵魂人物的潜伏笔记5
查看>>
SQL代码自动生成器
查看>>
向左还是往右?Chris Dixon谈何时放弃你的idea
查看>>
OC 计算幂集 - 递归法
查看>>
xstream使用的第二个小问题
查看>>
只会编程的程序员没有前途
查看>>
Litespeed如何安装phpmyadmin/pureftpd
查看>>
四层和七层负载均衡的区别
查看>>
Nginx+Tomcat关于Session的管理
查看>>
我的友情链接
查看>>
Linux Vue环境搭建
查看>>
String、StringBuffer和StringBuilder
查看>>
SUDO 操作详解
查看>>
CSDN泄密统计
查看>>
我的友情链接
查看>>
redhat 生产环境版本选择
查看>>
第八章第二层交换和生成树协议(STP)
查看>>
ab 测试简单说明
查看>>
apache 伪静态转到nginx
查看>>