とテーブルビューのセル。しかし、各セルに1つ以上のテキストフィールドがある場合は、データをどのように埋めることができますか?3迅速な私はMacOSのために迅速な3で動作し、私はこのようなデータでいっぱいになりますテーブルビューを、持っているより多くのテキストフィールド
各セルの正しいテキストフィールドにどのように値を割り当てることができますか?
iOSには、プロトタイプのセルとカスタムセルを備えたソリューションがありました。 しかし、macOSではどのように動作しますか?
とテーブルビューのセル。しかし、各セルに1つ以上のテキストフィールドがある場合は、データをどのように埋めることができますか?3迅速な私はMacOSのために迅速な3で動作し、私はこのようなデータでいっぱいになりますテーブルビューを、持っているより多くのテキストフィールド
各セルの正しいテキストフィールドにどのように値を割り当てることができますか?
iOSには、プロトタイプのセルとカスタムセルを備えたソリューションがありました。 しかし、macOSではどのように動作しますか?
です。
まず、NSTableView
は、UITableView
よりはるかに汎用性があります。
ビューベースのテーブルビューでは、すべてをNSView
から継承するビューとして使用できます。追加のコンテンツの有無にかかわらず、専用のNSTableCellView
インスタンス(カスタムコンテンツを含むカスタムビュー)を単一のNSTextField
(ビューを囲まない)にすることができます。
コンテンツ全体または複数の列を含む単一の列を使用することもできます。
データソースは1次元です。行ごとに1つの値しか得られません。複数の値を割り当てるには、たとえばカスタムクラス(構造体ではなくクラスで、Cocoaバインディングを使用する必要があります)などのモデルが必要です。
標準NSTableCellView
のインスタンスを持つ3つの列があるとします。
Person
インスタンス
var people = [Person]()
方法でアレイを作成するコントローラでモデル
class Person {
let firstName, lastName, email : String
init(firstName ...
}
を作成numberOfRows
未修飾である
func numberOfRows(in tableView: NSTableView) -> Int {
return people.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return people[row]
}
ためPerson
インスタンスを返すobjectValueFor
方法において
次にMacOSのマジック来る:インタフェースビルダーでバインディング・インスペクタ(⌥⌘7)を開き、それぞれのValue
を結合しますテキストフィールドはTable Cell View
であり、Model Key Path
からobjectValue.firstName
、objectValue.lastName
またはobjectValue.email
です。
バインディングは、モデルプロパティをテキストフィールドの文字列値に動的に接続します。この手順は、複数のUI要素を持つ単一の列または単一の要素を持つ複数の列のそれぞれについて同じです。
少し質問:1つのテキストフィールドに2つの値をバインドできますか? – Ghost108
私は分かりません。 – vadian
現時点では、テキストフィールドA>モデルキーパス> objectvalue.firstname =テキストフィールド値=ファーストネーム。私の希望:テキストフィールドA>モデルキーパス> objectvaule.firstname、objectvalue.secondname =テキストフィールド値=ファーストネームsecondname – Ghost108