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!
}
Другие вопросы по тегам