2017-05-12 52 views
0

我與SWIFT 3合作的MacOS和我有一個tableview中,將與這樣的數據來填充的tableview細胞:迅速3 - 與更多的文本框

var test = ["Person 1","Person 2","Person 3"] 

func numberOfRows(in tableView: NSTableView) -> Int { 
    return test.count 
} 

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? { 
    return ("\(test[row]) \(test[row])") 
} 

這工作得很好。但是,如果每個單元格的文本字段多於一個,我如何填充數據?

如何將值分配給每個單元格的正確文本字段?

在iOS中有一個原型單元格和自定義單元格的解決方案。 但它如何爲macOS工作?

回答

0

這取決於。

首先NSTableViewUITableView多得多。

在基於視圖的表格視圖中,您可以將所有內容都用作繼承自NSView的視圖。這可以是單個的NSTextField(不包含視圖)專用的NSTableCellView實例,有或沒有附加內容或具有自定義內容的自定義視圖。

您也可以在整個內容或多列中使用單個列。

您的數據源是一維的,每行只有一個值。爲了分配多個值,你需要一個模型,例如一個自定義類(一個類 - 而不是一個結構 - 需要能夠使用Cocoa綁定)。

讓我們假設您有三列與標準的NSTableCellView實例。

  • 創建一個模型

    class Person { 
        let firstName, lastName, email : String 
    
        init(firstName ... 
    } 
    
  • 在控制器與Person實例

    var people = [Person]() 
    
  • 的方法創建一個數組numberOfRows是未修飾的

    func numberOfRows(in tableView: NSTableView) -> Int { 
        return people.count 
    } 
    
  • 在該方法中objectValueFor只返回Person實例給定的行

    func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? { 
        return people[row] 
    } 
    
  • 現在到MacOS的魔力:在Interface Builder打開綁定督察(⌥⌘7),並結合各自的Value文本字段爲Table Cell ViewModel Key PathobjectValue.firstName,objectValue.lastNameobjectValue.email

Bindings將模型屬性動態地連接到文本字段的字符串值。對於具有多個UI元素的單個列或分別具有單個元素的多個列,該過程是相同的。

+0

一個小問題:是否可以在一個文本字段中綁定兩個值? – Ghost108

+0

我不明白。 – vadian

+0

此刻:Textfield A> Model Key Path> objectvalue.firstname = Textfield value = first name。我的願望:Textfield A>模型關鍵路徑> objectvaule.firstname,objectvalue.secondname = Textfield value = firstname secondname – Ghost108