【问题标题】:Accessing a NSTableviews custom Tablecellview访问 NSTableviews 自定义 Tablecellview
【发布时间】:2019-01-28 01:46:28
【问题描述】:

我制作了一个 NSTableview 和一个自定义的 tablecellview 类“KSTablecellview”,它定义了 tableview 内的单元格。

现在我尝试在某个时间访问这些单元格和其中的元素,例如通过用户输入触发。

例如,我想在我的一个自定义单元格视图中更改文本字段的文本。我试过了:

Outlet_TableView.selectRowIndexes(IndexSet(integer: 0), byExtendingSelection: false) // Selecting row #1

let view = Outlet_TableView.view(atColumn: 0, row: 0, makeIfNecessary: false) as! KSTableCellView // getting cellview, at first row/ first column (-> crashes)    
view.myTextField.stringvalue = "Hello World"

这给我“[...] [默认]无法加载 Info.plist 异常 (eGPUOverrides)”失败

我尝试了一些其他的东西并试图找出问题的原因,但我无法做到,我还是个初学者。

任何帮助都会非常棒。

我正在使用 XCode 和 Swift,尝试为 Mac OS 构建应用程序。

【问题讨论】:

    标签: swift macos nstableview


    【解决方案1】:

    您应该尽量避免手动更新单元格的内容。相反,您应该从数据源重新加载数据。

    func reloadData(forRowIndexes rowIndexes: IndexSet, 
                               columnIndexes: IndexSet)
    

    这将依次从给定索引/列的数据源中获取数据。

    例如,您的数据源可能在用户事件发生后的给定索引处包含"Hello World"(前提是您更新了数据源内容),因此将在dataCellFor: 委托方法中使用。

    【讨论】:

    • 谢谢,那我就那样做。除了我不应该手动更新单元格之外,你认为有办法吗?或者那是不可能的?
    • 你可以这样做,但是一旦你调用 reloadData,如果你没有更新数据源,它会覆盖你的更改
    【解决方案2】:

    可能是您在第一次加载表之前(例如在viewDidLoad)或在tableViewnumberOfRows = 0 上执行这些操作。

    tableView 加载该行之前,它不会在该行内创建视图,tableView.view(atColumn:, row:, makeIfNecessary: false) 将返回nil 并强制解开此nil 将使您的应用程序崩溃。

    【讨论】:

    • 好吧,我现在是在 ViewDidLoad() 里面做的,但是在 super.viewDidLoad() 之后,所以我猜不应该是这样。
    • 即使你调用super.viewDidLoad()它也不会工作,因为NSTableViewDatasource方法不会被viewDidLoad调用。最好在拨打tableView.view(atColumn:, row:, makeIfNecessary: false)之前拨打tableView.reloadData()
    • 手动更新单元格也是可能的,但不建议这样做。您在问题中所做的手动方式将更新单元格。
    • 好的 - 我知道使用 tableview.reloadData 是正确的方法。我有一个问题。我正在尝试使 tableview-cell 中的元素成为第一响应者。为了做到这一点,我不能使用 reloadData ,因为在重新加载时将 Cell 设置为 firstresponder 是行不通的。所以我需要从“外部”手动访问单元格......但是这样做 - 即使在 ViewDidLoad 之外,例如通过按下按钮触发,也会一直给我一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2019-03-02
    • 2013-05-04
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多