0

好的,所以我有一个带有 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。我哪里错了?

4

1 回答 1

0

我认为您的示例中仍然缺少 undoManager的初始化。你声明

NSUndoManager *undoManager;

在你的头文件中,但我看不到你在哪里分配/初始化它。

尝试添加

undoManger = [NSUndoManager alloc] init];

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

于 2010-11-11T17:35:29.833 回答