我想在将鼠标悬停在表格视图单元格上时更改其文本背景颜色,类似于当您将鼠标悬停在标签名称上时,AddressBook 如何“突出显示”联系人元素的标签。但是我不知道如何实现......
检测特定 NSCell 上的鼠标悬停并且...
检测到他悬停的单元格后,突出显示该单元格中的文本(不像用户选择该行那样突出显示整行)
由于 NSCell 不是 NSView 的子类,这似乎是一项非常困难的任务。
任何有关此操作的示例或有关如何完成此操作的解释将不胜感激。
Thanks!
I actually got it working using another method. I got it from the example posted here... http://www.cocoadev.com/index.pl?NSTableViewRollover http://www.cocoadev.com/index.pl?NSTableViewRollover
https://web.archive.org/web/20111013060111/http://cocoadev.com/index.pl?NSTableViewRollover https://web.archive.org/web/20111013060111/http://cocoadev.com/index.pl?NSTableViewRollover
我没有使用 NSCell 的跟踪机制,而是在子类 NSTableView 中跟踪 mouseEntered/mouseExited 和 mouseMoved。
当调用 tableview awakeFromNib 方法时,我从 tableview 的可见部分创建一个跟踪矩形
我有一个 BOOL ivar,当鼠标位于跟踪区域内时(mouseEntered)设置为 YES,不在跟踪区域时设置为 NO(mouseExited)
在 mouseMoved 方法中,我确定鼠标光标所在的当前行并将其设置为 NSInteger ivar,然后调用 tableview 的 setNeedsDisplayInRect: 传递鼠标所在行的矩形。
我还重写了resetCursorRects以删除旧的跟踪矩形并添加一个新的...当滚动tableview时调用此方法,以便它跟踪最新的可见矩形。
最后,在我的表视图的委托中,我确定选定的行(通过从表视图的 NSInteger ivar 检索行索引,如果当前绘制的单元格与鼠标光标所在的行匹配,则更改单元格的文本颜色(或任何您想要的颜色)这一切都是在委托方法中完成的:tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
我希望这对其他人有帮助,因为这有点棘手。确保 tableview 是视图加载时的第一个响应者也可能很重要,这只会让事情变得更加精简和干净。
顺便说一句,有没有办法使视图中的特定控件始终成为第一个响应者,而没有其他可能作为第一个响应者?即使像 iPhone 这样的方法... viewWillAppear 方法也会有所帮助,因为我可以在每次视图可见时设置第一响应者...但我不知道 Mac 上有这样的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)