我正在尝试创建一个自定义 NSView
以显示在基于 View 的 NSTableView
的列中。该 View 包含 2 个 subview ,一个 NSTextField
和一个 NSButton
。我希望按钮保持由约束设置的宽度,并在调整 NSView 大小时调整文本字段的大小。下面是一个小动画,显示了 NSView
及其 subview ,以及我创建的约束。
如您所见,调整 NSView
的大小可以按预期进行。
现在,当在 NSTableView
中显示此自定义 NSView
时,按钮看起来好像消失了,并且调整列大小会使文本字段随之调整大小('类别列)。
用于在tableView:viewForTableColumn:row
中创建NSView
的代码:
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
}
奇怪的是,当两个 View 没有限制时,按钮和文本字段都很好地显示在列内,但它们当然不会随着表列宽度调整大小。
我做错了什么?
编辑:看起来还有其他问题。 NSView
本身根本不随表格列调整大小。
最佳答案
我认为 TableCategoryView
是您的新类,它是 NSView
的子类,并将替换您在创建时获得的 NSTableCellView
(在 IB 中)基于 NSTableView 的 View 。如果您确实想创建自己的 TableCellView,它应该是 NSTableCellView
的直接子类,而不是 NSView
。
但在您的情况下(向 TableCellView 添加按钮),您不需要创建新类。现有的 TableCellView 对象已有一个名为 textField
的 TextField(属性)。然后,只需将一个按钮拖动(意味着:添加)到现有的 TableCellView 中(调整其大小并设置约束),并将链接从按钮拖动到 TableView 委托(delegate)中的相应方法。在“对应方法”中可以询问点击的行和列,并识别点击的按钮。我为 TableView 这样做了,对我来说效果很好。
关于macos - NSTableView 中的自定义 NSView 不显示所有 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28473778/