作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有基于 View 的 NSTableView
和自定义 NSTextField
子类实例来绘制行标签。
根据是否选择(突出显示)行,我想更改自定义文本字段的背景颜色。
我如何知道我的文本字段的 drawRect:(NSRect)dirtyRect
是否选择了父表行?
文本字段甚至不知道它是 TableView 的一部分(也不应该知道)。
如果我将一个普通的 NSTextField
放入 TableView 中,它会根据行选择状态自动更改其字体颜色,因此文本字段必须以某种方式知道它是否被选择/突出显示或者现在。
最佳答案
表格 View 是单元格 View 中 View 的父 View 。因此,您可以在drawRect方法中迭代 View 层次结构以找到父 TableView 。并用它检查是否选择了包含自定义 NSTextField 的行。
override public func drawRect(dirtyRect: NSRect) {
var backgroundColor = NSColor.controlColor() //Replace by the non selected color
var parentView = superview
while parentView != nil {
if let tableView = parentView as? NSTableView {
let row = tableView.rowForView(self)
if tableView.isRowSelected(row) {
backgroundColor = NSColor.alternateSelectedControlColor() //Replace by the selected background color
}
break
}
parentView = parentView?.superview
}
//Perform the drawing with the backgroundColor
// ...
}
关于cocoa - TableView 中的自定义 NSTextField : how do I know if the row is selected to change the background color?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8908086/
我是一名优秀的程序员,十分优秀!