根据 Apple's documentation on [NSTableViewDelegate tableView:shouldEditTableColumn:row:]
,“此方法仅对基于 NSCell 的 TableView 有效”。基于 View 的 TableView 的等价物是什么?我想用自定义编辑体验替换默认的内联编辑。
最佳答案
评论 Astoria 的方法:
当模型的可编辑性发生变化时必须更改文本字段的可编辑性的不方便“问题”是您必须“主动”跟踪模型的可编辑性并更新文本字段的可编辑性。
相比之下,基于单元格的 TableView 的委托(delegate)方法将对可编辑性的关注推迟到用户尝试进行编辑的那一刻,此时委托(delegate)仅返回模型是否可以编辑。设置少了很多,犯错的可能性也小了。 (例如,根据您如何监控/响应模型中的可编辑性,您可能会错过更改,现在用户可能会错误地编辑或不编辑该字段。)
因此,一种不同的方法是在用户尝试编辑时重新创建确定可编辑性的委托(delegate)。为此,您需要将 NSTextField
子类化,覆盖“正确的位置”,询问委托(delegate)人,并允许或禁止可编辑性。
“正确的位置”似乎是覆盖 acceptsFirstResponder
,并返回 NO。
- (BOOL)acceptsFirstResponder
{
BOOL accepts = [super acceptsFirstResponder];
if (accepts) {
if ([self.delegate respondsToSelector:@selector(textFieldShouldBecomeEditable:)]) {
accepts = [self.delegate textFieldShouldBecomeEditable:self];
}
}
return accepts;
}
如上,只要该字段的editable
为YES,就调用delegate进行最终确定。
根据您的应用程序,这可能是一种更理想的方法,因为监视对模型可编辑性的更改并不直接。但是,一般来说,简单地设置字段的 editable
属性的标准方法是最好的。
关于objective-c - TableView :shouldEditTableColumn:row: for view-based NSTableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023976/