2017-05-12 6 views
0

とテーブルビューのセル。しかし、各セルに1つ以上のテキストフィールドがある場合は、データをどのように埋めることができますか?3迅速な私はMacOSのために迅速な3で動作し、私はこのようなデータでいっぱいになりますテーブルビューを、持っているより多くのテキストフィールド

各セルの正しいテキストフィールドにどのように値を割り当てることができますか?

iOSには、プロトタイプのセルとカスタムセルを備えたソリューションがありました。 しかし、macOSではどのように動作しますか?

答えて

0

です。

まず、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.firstNameobjectValue.lastNameまたはobjectValue.emailです。

バインディングは、モデルプロパティをテキストフィールドの文字列値に動的に接続します。この手順は、複数のUI要素を持つ単一の列または単一の要素を持つ複数の列のそれぞれについて同じです。

+0

少し質問:1つのテキストフィールドに2つの値をバインドできますか? – Ghost108

+0

私は分かりません。 – vadian

+0

現時点では、テキストフィールドA>モデルキーパス> objectvalue.firstname =テキストフィールド値=ファーストネーム。私の希望:テキストフィールドA>モデルキーパス> objectvaule.firstname、objectvalue.secondname =テキストフィールド値=ファーストネームsecondname – Ghost108

関連する問題