IOS开发之Cocoa编程—— NSUndoManager
来源:互联网 发布:免费smtp服务器软件 编辑:程序博客网 时间:2024/05/13 14:02
http://blog.csdn.net/pjk1129/article/details/7298132
在Cocoa中使用NSUndoManager可以很方便的完成撤销操作。NSUndoManager会记录下修改、撤销操作的消息。这个机制使用两个NSInvocation对象栈。
NSInvocation会把消息(选择器和接受者及参数)包装成一个对象,这个对象就是NSInvocation的实例。当一个对象收到它不理解的消息时,消息发送机制会在报出错误前检查该对象是否实现了forwardInvocation这个方法。如果实现了,就会将消息打包成NSInvocation对象,然后调用forwardInvocation方法。
当进行操作时,控制器会添加一个该操作的逆操作的invocation到Undo栈中。当进行Undo操作时,Undo操作的逆操作会倍添加到Redo栈中,就这样利用Undo和Redo两个堆栈巧妙的实现撤销操作。
这里需要注意的是,堆栈中存放的都是NSInvocation实例。
假设在我们的程序中有walkLeft以及这个方法的逆方法walkRight,我们可以这样来实现撤销功能。
- (void) walkLeft
{
position = position + 10;
[[undoManager prepareWithInvocationTarget:self] walkRight];
[self showTheChangesToThePostion];
}
prepareWithInvocationTarget:方法记录了target并返回UndoManager,然后UndoManager重载了forwardInvocation方法,也就将walkRight方法的Invocation添加到undo栈中了。
- (void) walkRight
{
position = position - 10;
[[undoManager prepareWithInvocationTarget:self] walkLeft];
[self showTheChangesToThePostion];
}
[undoManager setActionName:@"Insert"];
- 顶
- 1
0 0
- IOS开发之Cocoa编程—— NSUndoManager
- IOS开发之Cocoa编程—— NSUndoManager
- IOS开发之Cocoa编程—— NSUndoManager
- IOS开发之Cocoa编程—— NSUndoManager
- IOS开发之Cocoa编程—— NSUndoManager
- IOS开发之Cocoa编程—— NSUndoManager
- IOS开发 NSUndoManager
- iOS开发笔记之十七——学习Cocoa和Cocoa Touch框架
- Cocoa NSUndoManager (REDO/UNDO)
- Cocoa中的NSUndoManager
- Cocoa中的NSUndoManager
- iOS开发之Cocoa是什么
- IOS学习之——Cocoa 和Cocoa Touch
- IOS 之 NSUndoManager撤销与恢复系列
- iOS学习笔记10(8)—深入浅出 Cocoa 多线程编程之 block 与 dispatch quene
- [深入浅出Cocoa]iOS网络编程之Socket
- [深入浅出Cocoa]iOS网络编程之CFNetwork
- [深入浅出Cocoa]iOS网络编程之NSStream
- 使用C++获取文件夹中所有文件名
- Android 清除缓存
- 互联网+模式不良资产处置正式上线
- pyqt4 label点击事件,label贴图
- Android Studio 关联源码
- IOS开发之Cocoa编程—— NSUndoManager
- 字体收集
- 利用@media screen实现网页布局的自适应
- 1.简单实例:ASP.NET下Echarts通过Ajax从数据库中获取数据
- 《Deep Learning》译文 第一章 前言(下) 神经网络的变迁与称谓的更迭
- Opera developer 38.0版本起嵌入免费VPN
- [剑指offer]数组中出现次数超过一半的数字
- addTarget参数含义||addTarget: action: forControlEvents:
- 2013山东省第三届ACM省赛 Fruit Ninja II