【问题标题】:Why table view cell 's textFiled never change?为什么 table view cell 的 textField 永远不会改变?
【发布时间】:2017-09-17 18:14:35
【问题描述】:

================================================ ====================

class ViewController: NSViewController,NSTableViewDelegate, NSTableViewDataSource{

@IBOutlet weak var sidebarView: NSTableView!

func numberOfRows(in tableView: NSTableView) -> Int {

    return 9
}


func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {

    let tableCellView = tableView.make(withIdentifier: tableColumn!.identifier, owner: self) as? NSTableCellView

    let str:String = (tableColumn?.identifier)!
    if str == "SIDEBAR_ITEM" {
        tableCellView!.textField?.stringValue = "test"
        print(tableCellView!.textField?.stringValue)
    }
    return tableCellView
}

func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
    //print("rowViewForRow")
    return NSTableRowView(frame: NSRect(x: 0, y: 0, width: 100, height: 100))

}}

================================================ ====================

这有什么问题?那是任何错误配置吗?它总是显示“表格视图单元格”

【问题讨论】:

  • 运行代码时,strobjectValueFor 方法中的实际值是多少?
  • 您知道协议NSTableViewDelegate 声明了一个方法tableView(_:viewFor:row:) 以及何时应该实现它吗? (另外,您最好将代码显示为文本,而不是图像。)
  • str的值与比较值“SIDEBAR_ITEM”相同,我也按照你的说法实现了tableView(_:viewFor:row:)方法,但它永远不会改变标题
  • objectValueFor的实现是错误的。通常你必须返回dataSourceArray[row]

标签: swift macos


【解决方案1】:

终于找到问题了! 我错过了实现方法“tableView(_ tableView:NSTableView,viewFor tableColumn:NSTableColumn?,row:Int)-> NSView?”

【讨论】:

    【解决方案2】:

    tableView(_:viewFor:row:) 是委托方法而不是数据源方法。除非您将 tableView 指定为符合 NSTableViewDelegate 协议,否则不会调用该方法。这让我很困惑,因为我认为这是一种源方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多