我想在表格视图单元格的文本编辑会话期间拦截或禁用Cmd-Z / Shift-Cmd-Z。
这是一个基于单元格的表视图,其中包含一系列列,这些列的值相互影响,因此填充某些列会自动填充其他列。当用户在编辑会话中按下Cmd-Z时,撤消管理员可以更改当前正在编辑的属性,并为用户带来令人困惑的结果。
以下是一个例子:
第1步:用户在第二栏中输入“.030”:
步骤2:用户按下选项卡,模型自动更新第三,第四和第五列:
步骤3:用户按下Ctrl-Z,模型撤消对第2,3,4和5列的更改,但编辑会话仍在进行中,因此旧值显示在第3列中:
步骤4:没有输入任何内容,用户按下取消编辑的标签,第三列的值消失:
这里没有发生任何“错误”,但这令人困惑。
当编辑其中一个单元格时,我只想拦截Cmd-Z和Shift-Cmd-Z并忽略它们。我想我应该在编辑期间覆盖-keyDown:
在第一响应者身上。但那是什么?表视图根本不会获取这些关键事件,并且单元格也不是响应者。
答案 0 :(得分:0)
找到了一个有效的解决方案在我的NSTableView
子类中:
// Disable undo and redo while table's field editors have first responder status
-(BOOL)validateMenuItem:(NSMenuItem *)menuItem {
if (self != self.window.firstResponder)
if (@selector(undo:) == menuItem.action || @selector(redo:) == menuItem.action)
return NO;
return YES;
}
// Intercept undo events while table's field editors have first responder status
-(IBAction)undo:(id)sender {
if (self != self.window.firstResponder)
[self noResponderFor:_cmd];
else
[self.nextResponder tryToPerform:@selector(undo:) with:sender];
}