NSUndoManager未在iOS中调用所选方法

时间:2010-11-02 18:44:47

标签: iphone ios uitextview nsundomanager

好的,所以我有一个带有UITextView的应用,我希望展示标准的撤销行为。我在这个网站以及Apple Developer Docs上搜索了很多教程和答案,我无法理解为什么我生产的东西不起作用。

每当修改UITextView时(我使用textView.inputView属性使用非标准键盘),下面的方法将传递一个字符串,该字符串是文本视图所需的新文本:

- (void)setText:(NSString*)text{

NSString *oldText = [textView.text mutableCopy];

if (text != oldText) {

    [undoManager registerUndoWithTarget:self selector:@selector(setText:) object:oldText];  
    textView.text = text;

    }
}

然后在按下UIButton时实现撤消

[undoManager undo];

已执行。

我已使用

在头文件中声明了undoManager
NSUndoManager *undoManager;

并在我的实现中合成它但是当我按下撤消UIButton时没有任何反应,并且从不调用setText。我哪里错了?

1 个答案:

答案 0 :(得分:0)

我认为在您的示例中仍然缺少undoManager的初始化。你宣布

NSUndoManager *undoManager;
在你的头文件中

,但我看不到你在哪里分配/初始化它。

尝试添加

undoManger = [NSUndoManager alloc] init];

在你的“viewDidLoad”(或类似的)方法中。当你不再需要它时,不要忘记释放适当的对象,例如dealloc。