2017-05-12 51 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