Macアプリで NSTableView の NSTableCellView の NSTextField からテキストを取得する
https://gyazo.com/bee70d557be88b883473c3d85c3b2f91
https://gyazo.com/dc65f8849cd232f253466f63cc3da70f
おなじように、ふたつめのカラムには Text を入力します。
https://gyazo.com/a18f27fdd6aea13eeea64f2dc33cdec2
https://gyazo.com/03eb119780e23864cecc55c328daf06d
ふたつめのカラムもおなじように設定します。
これで Storyboard の設定はおしまいです。
code: Swift
extension TableViewController: NSTableViewDataSource, NSTableViewDelegate {
func numberOfRows(in tableView: NSTableView) -> Int {
return 10
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
guard let column = tableColumn else { return NSView() }
guard let cell = tableView.makeView(withIdentifier: column.identifier, owner: self) as? NSTableCellView else { return NSView() }
if column.identifier.rawValue == "No." {
cell.textField?.stringValue = "\(row)"
} else if column.identifier.rawValue == "Text" {
cell.textField?.stringValue = "\(row)ですよ"
}
return cell
}
}
https://gyazo.com/c344feb5907733d143c6ada2c741b3d3
これで前準備は完了です。
Text カラムをクリックしたときに、テキストフィールドの値を取得してデバッグエリアに表示します。
code: Swift
@IBAction func clickTableView(_ sender: NSTableView) {
if let cellView = sender.view(atColumn: sender.clickedColumn, row: sender.clickedRow, makeIfNecessary: true) as? NSTableCellView {
let text = cellView.textField?.stringValue
print("\(String(describing: text))")
}
}
https://gyazo.com/b3cf4592900f2cdcc879fb7726d60d6f
No. カラムをクリックすると No. の値が、 Text カラムをクリックすると Text の値がデバッグエリアに表示されました。
そして、 NSTableCellView が NSTextField を保持しているので、そこから stringValue を取り出しました。