NSTableView中的自定义NSView未显示所有子视图

时间:2015-02-12 09:29:05

标签: macos swift interface-builder nstableview nsview

我尝试创建自定义NSView以在基于视图的NSTableView的列中显示。该视图包含2个子视图,NSTextFieldNSButton。我希望按钮保持约束设置的宽度,并在NSView调整大小时调整文本字段的大小。下面是一个小动画,显示NSView及其子视图以及我创建的约束。

Creating constraints

如您所见,调整NSView的大小可以按预期工作。

现在,当在NSView中显示此自定义NSTableView时,看起来该按钮就会消失,并且调整列的大小会使文本字段调整大小('类别&#39 ;列)。

Button is gone

用于在NSView中创建tableView:viewForTableColumn:row的编码:

let identifier = tableColumn!.identifier

if identifier == "Category" {
    var view = tableView.makeViewWithIdentifier(identifier, owner: self) as? TableCategoryView

    if view == nil {
        view = TableCategoryView(frame: tableView.frame)
        view!.identifier = identifier
    }

    return view
 }

奇怪的是,当2个视图没有约束时,按钮和文本字段都很好地显示在列中,但它们当然不会随表格列宽度调整大小。

我做错了什么?

编辑:看起来其他错误。 NSView本身并没有使用表格列进行大小调整。

1 个答案:

答案 0 :(得分:1)

我认为TableCategoryView是您的新类,它是NSView的子类,并且会替换在创建(在IB中)基于NSTableCellView的视图时获得的NSTableView。如果您真的想要创建自己的TableCellView,它应该是NSTableCellView而不是NSView的直接子类。

但在您的情况下(向TableCellView添加一个按钮),您不需要创建新类。现有的TableCellView对象已经有一个名为textField的TextField(属性)。然后只需将一个按钮拖动(表示:添加)到现有的TableCellView中(调整其大小并设置约束),然后将该按钮的链接拖动到TableView委托中的相应方法。在“对应方法”中,您可以要求单击的行和列并标识单击按钮。我这样做了一个TableView,对我来说它运作良好。