我尝试创建自定义NSView
以在基于视图的NSTableView
的列中显示。该视图包含2个子视图,NSTextField
和NSButton
。我希望按钮保持约束设置的宽度,并在NSView
调整大小时调整文本字段的大小。下面是一个小动画,显示NSView
及其子视图以及我创建的约束。
如您所见,调整NSView
的大小可以按预期工作。
现在,当在NSView
中显示此自定义NSTableView
时,看起来该按钮就会消失,并且调整列的大小会使文本字段调整大小('类别&#39 ;列)。
用于在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
本身并没有使用表格列进行大小调整。
答案 0 :(得分:1)
我认为TableCategoryView
是您的新类,它是NSView
的子类,并且会替换在创建(在IB中)基于NSTableCellView
的视图时获得的NSTableView
。如果您真的想要创建自己的TableCellView,它应该是NSTableCellView
而不是NSView
的直接子类。
但在您的情况下(向TableCellView添加一个按钮),您不需要创建新类。现有的TableCellView对象已经有一个名为textField
的TextField(属性)。然后只需将一个按钮拖动(表示:添加)到现有的TableCellView中(调整其大小并设置约束),然后将该按钮的链接拖动到TableView委托中的相应方法。在“对应方法”中,您可以要求单击的行和列并标识单击按钮。我这样做了一个TableView,对我来说它运作良好。