在NSTableView的NSCell中检测鼠标悬停?

Pat*_*ick 8 macos cocoa objective-c

我希望在桌面视图的单元格上悬停时更改文本背景颜色,类似于当鼠标悬停标签名称时,AddressBook"突出显示"联系人元素的标签.但是我无法弄清楚如何完成......

检测到特定NSCell上的鼠标悬停和...在检测到他徘徊的单元格后,突出显示该单元格中的文本(不突出显示整行,就像用户选择该行一样)

由于NSCell不是NSView的子类,因此这似乎是一项非常困难的任务.

任何关于如何做到这一点或解释的例子将不胜感激.

谢谢!

Pat*_*ick 10

我实际上使用另一种方法工作.我从这里发布的例子中得到了它...... http://www.cocoadev.com/index.pl?NSTableViewRollover https://web.archive.org/web/20111013060111/http://cocoadev.com/index. PL'NSTableViewRollover

我没有使用NSCell的跟踪机制,而是在我的子类NSTableView中跟踪mouseEntered/mouseExited和mouseMoved.

  1. 当调用tableview awakeFromNib方法时,我从tableview的可见部分创建一个trackingRect

  2. 我有一个BOOL ivar,当鼠标位于跟踪区域(mouseEntered)时设置为YES,而当它不在时(mouseExited)设置为NO

  3. 在mouseMoved方法中,我确定鼠标光标所在的当前行并将其设置为NSInteger ivar,然后调用tableview的setNeedsDisplayInRect:传递鼠标所在行的矩形.

  4. 我还覆盖resetCursorRects以删除旧的跟踪矩形并添加一个新的...当滚动tableview时调用此方法,以便它跟踪最新的可见rect.

  5. 最后在我的tableview的委托中,我确定所选行(通过从表视图的NSInteger ivar中检索行索引并更改单元格的文本颜色(或任何你想要的),如果当前绘制的单元格与鼠标光标所在的行匹配所有这些都是在委托方法中完成的:tableView:(NSTableView*)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn*)aTableColumn行:(NSInteger)rowIndex

我希望这有助于其他人,因为这有点棘手.确保tableview是视图加载时的第一个响应者也很重要,这样可以使事情更简洁,更清晰.

顺便说一句,有没有办法在视图中进行特定控制总是第一个响应者,没有其他可能作为第一个响应者?即使是一个方法,如iPhone手机... viewWillAppear中的方法将帮助,因为我可以每次视图可见设置的第一个响应者...但我不知道在Mac上这样的方法.