NSUndoManager的一点学习记录
来源:互联网 发布:明朝朝鲜知乎 编辑:程序博客网 时间:2024/05/04 07:59
这两天看了一个coredata的官方代码,发现了里面的NSUndoManager类,就稍微的研究了一下.下面是我的一点学习记录
NSUndoManager 说白了主要就是2个方法,一个是redo,一个是undo,也就是对程序的撤销和恢复
-(void)undo{ [self.undoManage undo];}-(void)redo{ [self.undoManage redo];}
它里面有一个prepareWithInvocationTarget方法需要注意, 当进行操作时,控制器会添加一个该操作的逆操作的invocation到Undo栈中。当进行Undo操作时,Undo操作的逆操作会倍添加到Redo栈中,就这样利用Undo和Redo两个堆栈巧妙的实现撤销操作。
这里需要注意的是,堆栈中存放的都是NSInvocation实例。
还有就是setLevelsOfUndo方法,它设定了你最多可以撤销的次数
下面是一个从网上看到的源码,以供参考
-(void)undo{ [self.undoManage undo];}-(void)redo{ [self.undoManage redo];}-(void)apper{ if (!num) { self.navigationItem.rightBarButtonItem=nil; } else { if (self.undoManage.canUndo) { UIBarButtonItem*right=[[UIBarButtonItem alloc] initWithTitle:@"undo" style:UIBarButtonItemStyleBordered target:self action:@selector(undo)]; self.navigationItem.rightBarButtonItem=right; [right release]; } } if (!num) { self.navigationItem.leftBarButtonItem=nil; } else { UIBarButtonItem*left=[[UIBarButtonItem alloc] initWithTitle:@"redo" style:UIBarButtonItemStyleBordered target:self action:@selector(redo)]; self.navigationItem.leftBarButtonItem=left; [left release]; }}-(void)sub{ num-=10; [[self.undoManage prepareWithInvocationTarget:self] add]; label.text=[NSString stringWithFormat:@"%d",num]; [self apper]; }-(void)add{ num+=10; [[self.undoManage prepareWithInvocationTarget:self] sub]; label.text=[NSString stringWithFormat:@"%d",num]; [self apper];}#pragma mark - View lifecycle- (void)viewDidLoad{ [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. label=[[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 100)]; UIButton*btn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; btn.frame=CGRectMake(150, 150, 100, 100); [btn setTitle:@"add" forState:UIControlStateNormal]; [btn addTarget:self action:@selector(add) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; [self.view addSubview:label]; num=0; label.text=[NSString stringWithFormat:@"%d",num]; undoManage=[[NSUndoManager alloc] init]; [self.undoManage setLevelsOfUndo:999];}
有一篇不错的参考文章:IOS开发之Cocoa编程—— NSUndoManager
0 0
- NSUndoManager的一点学习记录
- 学习WM_PAINT的一点记录
- 学习 Jsp 的一点记录
- NSUndoManager
- NSUndoManager
- NSUndoManager
- arc的一点简单的学习记录
- 学习string类型的一点记录
- 关于storyboard的一点学习记录
- iOS - OpenCV 代码的一点学习记录
- docker学习的一点记录(一)
- 每天学习记录一点
- NSInvocation和NSUndoManager的关系
- 重装系统的一点记录
- kvo 的一点记录
- shiro的一点记录
- CATransform3D的一点记录
- INSTR的一点记录
- SQL中left join, right join有什么区别?
- Wishbone总线快速了解
- 个人搜索记录
- 小谈液晶LED显示及FSMC
- 【数据结构】哈希表
- NSUndoManager的一点学习记录
- 虚拟机基准测试工具
- hdu1231 最大连续子序列
- Oracle 创建用户、修改用户信息、为用户分配权限、为用户分配表空间配额、删除用户
- NPOI导出excel,插入图片
- 科学地生活追求
- 算法学习二----求子数组的最大和
- html utf-8 编码空格宽度 非两个空格=一个汉字
- WPF中的数据模板(DataTemplate)