右键单击一行禁用 NSTextFieldCell 的编辑

Disable editing of a NSTextFieldCell on right clicking on a row

我有一个基于 NSTableView 的视图,里面有一个 NSTextFieldCell。如果我 select 一行然后右键单击同一行,table 视图会在短暂延迟后将该字段置于编辑模式!右键单击应该只显示上下文菜单(它确实如此)但忽略编辑字段。

我怎样才能阻止这种行为?我没有做任何非标准的事情。我可以在调试器中看到,当我右键单击一行时,table 似乎调用了 _delayMakeFirstResponder,这似乎将该字段置于编辑模式,因为它已经被 selected。

您可以在设计中将可编辑的文本单元格行为更改为 None,或者您可以通过编程方式尝试此操作,

[TableColumn setEditable:NO]; //to disble column editing
[[TableView cell]setEditable:NO]; //to disable textcell editing

我找到了正确的解决方案。覆盖 NSTableViewNSResponder 方法 validateProposedFirstResponder:forEvent:。那里,return NO.

这就是我所做的。 m_menuWasShowing- (NSMenu *) menuForEvent:(NSEvent *)theEvent

中设置为 true
- (BOOL)validateProposedFirstResponder:(NSResponder *)responder forEvent:(NSEvent *)event {
  if (event.type == NSEventTypeLeftMouseDown || event.type == NSEventTypeLeftMouseUp) {
    // Ignore first left click if menu was previously showing
    if (m_menuWasShowing) {
      m_menuWasShowing = NO;
      return NO;
    }
  }
  return [super validateProposedFirstResponder:responder forEvent:event];
}