首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用NSUndoManager实现undo?

如何使用NSUndoManager实现undo?
EN

Stack Overflow用户
提问于 2010-09-01 18:10:32
回答 1查看 1.5K关注 0票数 1

我正在尝试将一个NSUndoManager添加到我的程序中,但是我不确定如何向管理器注册这些方法?使用:

代码语言:javascript
运行
复制
[myUndoManager registerUndoWithTarget:selector:object:];

如果我有以下方法会怎么样:

代码语言:javascript
运行
复制
-(IBAction)tapButton:(id)sender {
   myFoo++;    
   yourFoo++;    //incrementing integers
   fooFoo++;
}

如何在撤消管理器中注册此方法?选择器(发送器)的对象不是我要注册的对象。我需要用一个撤销调用递减myFoo、yourFoo和fooFoo。

EN

回答 1

Stack Overflow用户

发布于 2010-09-01 19:07:11

编写另一个方法-(void) decrementIntegers并注册,如下所示:

代码语言:javascript
运行
复制
[undoManager registerUndoWithTarget: self selector: @selector( decrementIntegers ) object: nil];

在此方法中,您需要重新注册原始方法以提供重做:

代码语言:javascript
运行
复制
[undoManager registerUndoWithTarget: self selector: @selector( tapButton: ) object: self];

但更好的方法是对整数使用访问器,并在其中撤消注册。如下所示:

代码语言:javascript
运行
复制
- (void) setMyFoo: (int) newMyFoo;
{
   if (myFoo != newMyFoo) {
      [[undoManager prepareWithInvocationTarget: self] setMyFoo: myFoo];
      myFoo = newMyFoo;
   }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3616946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档