3

我觉得这个表格单元格显示问题有一个简单的答案,但我显然需要比我更大的智慧才能找到它。

这是我的教科书控制器、表和封闭视图的委托和数据源类......

import Cocoa

class Table8020ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {

    var tokenText: [String] = ["alpha", "beta", "gamma", "delta", "epsilon", "zeta"]

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func numberOfRowsInTableView(aTableView: NSTableView) -> Int {
        println("numberOfRowsInTableView = \(tokenText.count)")
        return tokenText.count
    }

    func tableView(aTableView: NSTableView, objectValueForTableColumn aTableColumn: NSTableColumn?, row rowIndex: Int) -> AnyObject? {

        var result = aTableView.makeViewWithIdentifier(aTableColumn!.identifier, owner: self) as! NSTableCellView
            println("textField in  = \(result.textField!.stringValue)")

            result.textField!.stringValue = tokenText[rowIndex]

            println("textField out = \(result.textField!.stringValue)")
            return result
    }
}

我将更新记录到似乎工作正常的 .textField 中。

numberOfRowsInTableView = 6
textField in  = Table View Cell
textField out = alpha
textField in  = Table View Cell
textField out = beta
textField in  = Table View Cell
textField out = gamma
textField in  = Table View Cell
textField out = delta
textField in  = Table View Cell
textField out = epsilon
textField in  = Table View Cell
textField out = zeta

但是实际的表格显示保留了原始的界面生成器值!'Table View Cell' 在'返回结果'之后似乎发生了一些神秘的事情。

我正在使用最新的 Xcode 版本 6.3 (6D570) 和 Swift V1.2

4

1 回答 1

8

你犯了几个错误。

首先,您从tableView:objectValueForTableColumn:row. 此方法不是请求视图实例,而是请求您的视图实例将表示的对象。换句话说,它想知道视图将显示什么模型对象。在每种情况下,您的模型对象都非常简单 - 它是数组中的字符串之一。tokenText

func tableView(tableView: NSTableView,
    objectValueForTableColumn tableColumn: NSTableColumn?,
    row: Int) -> AnyObject? {
        return tokenText[row]
}

其次,您未能实施tableView:viewForTableColumn:row:. 这是您为表格中的每个单元格创建一个视图并告诉该视图您要显示模型对象的哪些位的地方。在每种情况下,您的模型对象只是一个字符串,因此您实际上是告诉视图在其中显示整个模型对象textField

func tableView(tableView: NSTableView,
    viewForTableColumn tableColumn: NSTableColumn?,
    row: Int) -> NSView? {

        var view = tableView.makeViewWithIdentifier(tableColumn!.identifier,
            owner: self) as! NSTableCellView
        view.textField!.stringValue = tokenText[row]

    return view
}
于 2015-04-14T12:11:53.163 回答