NSColorWell в NSTableView в быстром
У кого-нибудь есть какие-нибудь хорошие предложения для получения NSColorWell в NSTableView? Большинство других виджетов работают отлично, поскольку они основаны на ячейках, но NSColorWell не имеет соответствующего NSColorWellCell.
2 ответа
В табличном представлении на основе представления наиболее удобным решением являются привязки какао. Вы можете связать value
цвета хорошо до NSColor
экземпляр вашей модели.
Без привязки какао создать IBAction
метод в контроллере представления цели
@IBAction func colorDidChange(_ sender: NSColorWell)
{
let row = tableView.row(for: sender)
let column = tableView.column(for: sender)
print(row, column, sender.color)
}
В Интерфейсном Разработчике перетащите из цветовой скважины в контроллер вида и подключите действие. Действие напечатает row
, column
и новый цвет. tableView
это NSTableView
выход.
Если в одном и том же виде есть несколько цветовых ячеек, можно назначить разные теги, чтобы различать цветовые ямы.
Я решил свою проблему без Binding Cocoa. Я обновил представление, и все отлично работает, обновив 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!
}