【发布时间】:2014-06-19 11:19:38
【问题描述】:
我在基于单元格的 NSTableView 的列中有一个 NSTextFieldCell。这个单元格应该处理点击。当没有按下修饰键时,这可以正常工作。如果我按住 shift 或 command 键,表格视图会吞下 mouseDown 事件以尝试处理行选择。
有没有办法完全禁用 NSTableView 中的行选择?
有没有办法让 NSTableView 传递所有事件?
我的单元格子类派生自 TableViewLinks 示例代码中的 LinkTextFieldCell。它实现了:
- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)flag
由于我不想选择行,我的表视图委托实现:
- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)rowIndex
{
return NO;
}
- (BOOL)tableView:(NSTableView *)tableView shouldTrackCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
return YES;
}
我的委托方法是从 -[NSTableView mouseDown:] 调用的。未按下修饰键时调用鼠标跟踪代码。
有没有比继承 NSTableView 来覆盖 -[NSTableView mouseDown:] 更好的方法来解决这个问题?
【问题讨论】:
-
你能有表拒绝FirstResponder吗?这就是我能想到的,但我不确定它是否会破坏其他东西。
-
出于某种原因,我已经接受了 AcceptFirstResponder 返回 NO。没有区别。
标签: objective-c cocoa nstableview nscell