NSColorWell in an NSTableView in swift



任何人都有任何关于将NSColorWell放入 NSTableView?大多数其他小部件都很好用,因为它们是基于 在细胞周围,但NSColorWell没有相应的 NSColorWellCell.

基于视图的表视图中,最方便的解决方案是可可绑定。您可以将颜色池的value绑定到模型的NSColor实例。

如果没有 Cocoa 绑定,请在目标视图控制器中创建IBAction方法

@IBAction func colorDidChange(_ sender: NSColorWell)
{
let row = tableView.row(for: sender)
let column = tableView.column(for: sender)
print(row, column, sender.color)
}

在界面生成器中,控件从颜色池拖动到视图控制器并连接操作。该动作将打印rowcolumn和新颜色。tableViewNSTableView出口。

如果同一视图中有多个色井,则可以分配不同的标记来区分色井

我在没有绑定可可的情况下解决了我的问题 我更新了视图,通过升级NSTableCellView(最后3行)一切正常 在真正的程序中,这是一个帐户程序,表格视图和大纲视图之间存在太多关系,过滤器使我通过绑定重做了很多工作

感谢您的帮助

class ColorsController:  NSWindowController  {
@IBOutlet var colorTable: NSTableView!
let tableViewData =
[["firstName":"John","lastName":"Doe","emailId":"john.doe@mail.com"],
["firstName":"Jane","lastName":"Doe","emailId":"jane.doe@mail.com"]]
var color = [NSColor.red, NSColor.blue]
override func windowDidLoad() {
super.windowDidLoad()
self.colorTable.reloadData()
}
@IBAction func actionColorWell(_ sender: NSColorWell) {
let row = colorTable.row(for: sender as NSView)
color[row] =  sender.color
colorTable.reloadData()
let select1 : IndexSet = [row]
colorTable.selectRowIndexes(select1, byExtendingSelection: false)
}
}
extension ColorsController : NSTableViewDataSource, NSTableViewDelegate{
func numberOfRows(in tableView: NSTableView) -> Int {
return tableViewData.count
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?{
let identifier = (tableColumn?.identifier)!
switch identifier.rawValue {
case "firstName" :
let  result  = tableView.makeView(withIdentifier: identifier, owner: self) as! NSTableCellView
result.textField?.stringValue = tableViewData[row][(tableColumn?.identifier.rawValue)!]!
result.textField?.textColor = color[row]
return result
case "lastName" :
let  result  = tableView.makeView(withIdentifier: identifier, owner: self) as! NSTableCellView
result.textField?.stringValue = tableViewData[row][(tableColumn?.identifier.rawValue)!]!
result.textField?.textColor = color[row]
return result
case "emailId" :
let  result  = tableView.makeView(withIdentifier: identifier, owner: self) as! KSDataCellView
result.textField?.stringValue = tableViewData[row][(tableColumn?.identifier.rawValue)!]!
result.textField?.textColor = color[row]
result.colorWell.color = color[row]
return result
case "color" :
let result = tableView.makeView(withIdentifier: identifier, owner: self) as! NSColorWell
result.color = color[row]
return result
default:
return nil
}
}
}
class KSDataCellView: NSTableCellView {
@IBOutlet weak var colorWell:NSColorWell!
}

相关内容

  • 没有找到相关文章

最新更新