好的,所以我有一个带有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];
已执行。
我已使用
在头文件中声明了undoManagerNSUndoManager *undoManager;
并在我的实现中合成它但是当我按下撤消UIButton时没有任何反应,并且从不调用setText。我哪里错了?
答案 0 :(得分:0)
我认为在您的示例中仍然缺少undoManager的初始化。你宣布
NSUndoManager *undoManager;
在你的头文件中,但我看不到你在哪里分配/初始化它。
尝试添加
undoManger = [NSUndoManager alloc] init];
在你的“viewDidLoad”(或类似的)方法中。当你不再需要它时,不要忘记释放适当的对象,例如dealloc。