【发布时间】:2009-08-18 13:41:17
【问题描述】:
我有一个 NSTableView 作为我的应用程序的一个非常重要的部分,并希望它与它的其余部分更多地集成。它只有一列(它是一个列表),我自己绘制所有单元格(正常的 NSTextFieldCells)。
第一个问题是突出显示。我自己画了高光,想去掉蓝色背景。我现在用原始背景颜色填充整个单元格以隐藏蓝色背景,但是在拖动单元格时这看起来很糟糕。我尝试覆盖 NSCell 的 highlight:withFrame:inView: 和 highlightColorWithFrame:inView: 但什么也没发生。如何禁用自动突出显示?
我还希望在单击 NSTableView 之外的某个位置时取消选择所有行/单元格。由于所选单元格的背景/突出显示变为灰色,因此必须有一个事件,但我找不到它。我让我的单元格双击展开,可能需要撤消此操作。所以去掉灰色高光是不够的。
编辑:当单元格被双击时,我向 NSTableView 添加一个子视图,然后调用 NSTableView 的 resignFirstResponder。我试过这个:
- (BOOL)resignFirstResponder
{
if (![[self subviews] containsObject:[[self window] firstResponder]])
{
[self deselectAll:self];
...
}
return YES;
}
除了它不起作用之外,我还需要为视图层次结构中的所有对象实现此方法。是否有其他解决方案可以找出第一响应者何时离开某个视图层次结构?
【问题讨论】:
-
使用 setAction:NSOutlineView 的方法。看看 [this][1] 答案。 [1]:stackoverflow.com/a/23337627/944634
标签: objective-c cocoa nstableview