単純なビューベースのNSTableViewを作成できますが、識別子についてはわかりません。あなたは、通常の列に識別子を与え、その後、デリゲートメソッドを実装NSTableViewで テーブルセルビューのNSTableView識別子が混乱しています
:あなたが必要なものをあなたがする列に切り替え、その後func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?
とを、何かのように:
switch tableColumn!.identifier {
case "firstColumn":
//do something...
case "secondColumn":
//do something else...
default:
return nil
}
さらに、各セルに識別子も入力することができます。上記の例では、私は列に識別子を与えず、代わりに識別子をテーブルセルビュー自体に与えました。
私は、私は、デリゲートメソッドでは、このような何かを行うことができると推測さ:
if let firstColumnCellView = tableView.make(withIdentifier: "firstColumnCell", owner: self) as? NSTableCellView {
view.textField?.stringValue = "Hi! I'm in the first column"
return view
} else if let secondColumnCellView = tableView.make(withIdentifier: "secondColumnCell", owner: self) as? NSTableCellView {
view.textField?.stringValue = "Hi! I'm in the second column"
return view
} else {
return nil
}
これは動作しますが、最初のif let
の文を過ぎてそれを作ることはありません、ので、私のすべてのセルがこんにちは、私は「」と言います!私は理解していない他の
何か:それは表のセルのVと思われる最初の列」
詳細におけるメートルビュー識別子は識別子をカラムに置き換えます。
私は、文書のアウトラインに行くと識別子にこのような何か割り当てた場合:
tableColumn: "firstColumn"
tableViewCell: "firstColumnCell"
tableColumn: "secondColumn"
tableViewCell: "secondColumnCell"
、その後供給列識別子とセル識別子の両方を、それが動作!
switch tableColumn!.identifier {
case "firstColumn":
if let firstColumnCellView = tableView.make(withIdentifier: "firstColumnCell", owner: self) as? NSTableCellView {
view.textField?.stringValue = "Hi! I'm in the first column"
return view
} else {
return nil
}
case "secondColumn":
if let secondColumnCellView = tableView.make(withIdentifier: "secondColumnCell", owner: self) as? NSTableCellView {
view.textField?.stringValue = "Hi! I'm in the second column"
return view
} else {
return nil
}
default:
return nil
}
しかし、それクラッシュ私は、switch文は、第二カラムためのセル識別子を無視して、列の識別子を使用しようとして落下することができます。
switch tableColumn!.identifier {
case "firstColumn":
if let firstColumnCellView = tableView.make(withIdentifier: "firstColumnCell", owner: self) as? NSTableCellView {
view.textField?.stringValue = "Hi! I'm in the first column"
return view
} else {
return nil
}
default:
break
}
let cellView = tableView.make(withIdentifier: tableColumn!.identifier, owner: self) as! NSTableCellView
cellView.textField?.stringValue = "hello"
return cellView
//CRASH: Unexpectedly found nil when unwrapping tableColumn!.identifier
// The column both exists and has an identifier of "secondColumn", so how could
//this be nil?
そして、私がsecondColumnと同じ名前にsecondColumnCellの名前を変更することにより、このオーバーライド動作を確認することができそうです:
tableColumn: "firstColumn"
tableViewCell: "firstColumnCell"
tableColumn: "secondColumn" <--- Same Name
tableViewCell: "secondColumn" <-- Same Name
そして今、コードが期待通りに動作し、クラッシュしません。
ありがとうございます。私は質問に追加情報を追加しました。申し訳ありませんまだ私は理解していません。 – MH175