Objective c NSTableView中的鼠标悬停检测';什么是NSCell?
我想在tableview的单元格上悬停时更改其文本背景色,类似于鼠标悬停在标签名称上时AddressBook“高亮显示”联系人元素的标签。然而,我不知道如何完成 检测特定NSCell上的鼠标悬停,然后。。。 检测到他所停留的单元格后,突出显示该单元格中的文本(而不是像用户选择该行那样突出显示整行) 由于NSCell不是NSView的一个子类,这似乎是一项非常困难的任务 如能举任何例子或解释如何做到这一点,我们将不胜感激Objective c NSTableView中的鼠标悬停检测';什么是NSCell?,objective-c,cocoa,macos,Objective C,Cocoa,Macos,我想在tableview的单元格上悬停时更改其文本背景色,类似于鼠标悬停在标签名称上时AddressBook“高亮显示”联系人元素的标签。然而,我不知道如何完成 检测特定NSCell上的鼠标悬停,然后。。。 检测到他所停留的单元格后,突出显示该单元格中的文本(而不是像用户选择该行那样突出显示整行) 由于NSCell不是NSView的一个子类,这似乎是一项非常困难的任务 如能举任何例子或解释如何做到这一点,我们将不胜感激 谢谢 总的来说,这不是你所注意到的一项简单的任务 要在NSCell中跟踪鼠标
谢谢 总的来说,这不是你所注意到的一项简单的任务 要在NSCell中跟踪鼠标,请创建NSCell子类并重写
-[NSCell startTrackingAt:inView:]
及
-[NSCell stopTracking:at:inView:mouseIsUp:]
一旦您检测到鼠标在单元格内跟踪,您就可以通过[tableView rowAtPoint:point
]和[tableView columnAtPoint:point]
找到表中的单元格,然后通过[tableView frameOfCellAtColumn:column row:row]
找到您的框架
然后,您可以通过更改单元格的某些属性或通过覆盖drawInteriorWithFrame:inView:
直接更改单元格的绘制方式来更改单元格的绘制方式
以下是有关NSCell子类化的文档:
我实际上是用另一种方法让它工作的。我从这里发布的示例中得到它。。。 我没有使用NSCell的跟踪机制,而是在子类NSTableView中跟踪mouseEntered/mouseExited和mouseMoved
顺便说一句,有没有办法让视图中的特定控件始终是第一响应者,而没有其他可能成为第一响应者的方法?即使是iPhone之类的方法……viewWillAppear方法也会有所帮助,因为我可以在每次视图可见时设置第一响应者……但我不知道Mac上有这样的方法。我取得了一些成果类似的事情是,在我的NSTableView子类中为
NSMouseMovedMask
使用addGlobalMonitorForEventsMatchingMask:handler:
的添加GlobalMonitorForeventsMatchingMask:handler:
,再加上NSTableView的columnAtPoint
和rowAtPoint
,我可以确定鼠标的位置是否在给定范围内n细胞
使用此信息,当鼠标在特定单元格上时,我能够弹出一个弹出框。感谢您提供的信息!出于某种原因,我的startTrakingAt:inView:或stopTracing:at:inView:mouseIsUp方法没有被调用…我知道我的表不支持选择,因为我不希望用户能够选择一行…我想知道如果这影响了这一点。您确定表中正在使用您的子类吗?也就是说,您是否将列的单元格作为自定义子类的实例?这是我第二次找到返回此答案的方法,并发现它很有用。谢谢!