0

Как мне установить связь между моим NSViewController и NSTableViewCell, когда я выбираю эту ячейку на моем столеView? На iOS вы можете использовать setSelected, но в OSX он совершенно другой. Класс NSTableCellView не имеет такой функции. Я мог бы пропустить что-то простое. Как я могу поговорить с этой ячейкой? У меня есть пользовательский класс ячейки и на мой контроллер Tableview, я получил:NSTableViewCell setSelected?

func tableView(tableView: NSTableView, shouldSelectRow row: Int) -> Bool { 

    let previousSelected = NSIndexSet(index: selectedRow) 
    selectedRow = row 
    let indset = NSIndexSet(index: row) 

    // animate row expansion 
    self.tableView.noteHeightOfRowsWithIndexesChanged(indset) 

    // animate back the previously selected 
    self.tableView.noteHeightOfRowsWithIndexesChanged(previousSelected) 
    return true 
} 

Я также высоту Роу ...

func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat { 
    if row == selectedRow{ 
     return 90 
    }else{ 
     return 40 
    } 
} 

То, что я пытаюсь сделать, это позволить моим ячейка знает, что она выбрана, поэтому она может отображать разные вещи при выборе. Кто угодно ?

+1

Вы хотите выбрать ячейку программным способом (а не инициированным пользователем действием)? –

+0

Нет. Я просто хочу, чтобы класс Cell - NSTableCellView знал, когда он был выбран. Я не уверен, что его ViewController, который позволяет ячейке знать, что он был выбран, или если в классе ячеек есть метод, который запускается, когда ячейка выбрана, и какой метод будет – Farini

ответ

2

не действует на клетки, она работает на строках. NSTableRowView имеет собственность selected. Он обычно отвечает за рисование выбранного внешнего вида строк таблицы с помощью метода drawSelectionInRect().

Как именно ваша ячейка меняет свое поведение или внешний вид в зависимости от того, выбрана ли она? Вы уверены, что это не должно быть сделано строкой? Возможно, вы должны использовать собственный подкласс NSTableRowView.

Если необходимо, вы можете найти представление строки из представления ячейки. Один из способов - просто предположить, что супервизор ячейки - это представление строки, которое должно быть, когда оно не nil. Другой подход заключается в том, чтобы спросить таблицу, какая строка ячейки используется для использования rowForView(self), а затем спросить представление таблицы для представления строки с помощью rowViewAtRow(_:makeIfNecessary:).

+0

. Оно работает! Я получаю строку, а затем получаю ячейку, а затем я могу позволить классу ячеек знать, что она была выбрана путем добавления var: selected: Bool, например, @NicolasMiari. Спасибо вам обоим! – Farini

1

NSTableCellView похоже не имеет собственности selected. Возможно, вы можете подклассифицировать его и добавить такое свойство.

Затем реализовать метод делегата:

optional func tableView(_ tableView: NSTableView, 
     shouldSelectRow row: Int) -> Bool 

... и в тех случаях, когда вы вернетесь true (т.е. строка должна быть выбрана), установите selected свойство, которое вы только что определили в соответствующей ячейке до true.

Если вы хотите клетку, чтобы сделать что-то при выборе, определите свойство как это:

Выбор
var selected:Bool { 
    didSet { 
     if selected { 
      // Act accordingly... 
     } 
    } 
}