NSTableView 中的自定义 NSView 未显示所有子视图
Custom NSView in NSTableView not showing all subviews
我正在尝试创建自定义 NSView
以显示在基于视图的 NSTableView
中的列中。该视图包含 2 个子视图,一个 NSTextField
和一个 NSButton
。我希望按钮保持约束设置的宽度,并在 NSView
调整大小时调整文本字段的大小。下面是一个小动画,显示 NSView
及其子视图,以及我创建的约束。
如您所见,调整 NSView
的大小符合预期。
现在,当在 NSTableView
中显示此自定义 NSView
时,按钮看起来就像消失了,调整列的大小会使文本字段随之调整大小('Category'列)。
用于在 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
}
奇怪的是,当 2 个视图没有约束时,按钮和文本字段都愉快地显示在列内,但是它们当然不会随 table 列宽调整大小.
我做错了什么?
编辑: 看起来还有其他问题。 NSView
本身根本没有使用 table 列调整大小。
我认为 TableCategoryView
是您的新 class,它是 NSView
的子class,将替换您在创建时获得的 NSTableCellView
(在 IB 中)基于 NSTableView
的视图。如果你真的想创建自己的 TableCellView 它应该是 NSTableCellView
的直接子 class 而不是 NSView
.
但在您的情况下(向 TableCellView 添加一个按钮)您不需要创建新的 class。现有的 TableCellView 对象已经有一个名为 textField
的 TextField(属性)。然后简单地拖(意味着:添加)一个按钮到现有的 TableCellView 中(调整它的大小并设置约束)并将一个 link 从按钮拖到 TableView 的委托中的相应方法。在 "corresponding method" 中,您可以询问点击的行和列,并识别点击按钮。我为 TableView 这样做了,对我来说效果很好。
我正在尝试创建自定义 NSView
以显示在基于视图的 NSTableView
中的列中。该视图包含 2 个子视图,一个 NSTextField
和一个 NSButton
。我希望按钮保持约束设置的宽度,并在 NSView
调整大小时调整文本字段的大小。下面是一个小动画,显示 NSView
及其子视图,以及我创建的约束。
如您所见,调整 NSView
的大小符合预期。
现在,当在 NSTableView
中显示此自定义 NSView
时,按钮看起来就像消失了,调整列的大小会使文本字段随之调整大小('Category'列)。
用于在 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
}
奇怪的是,当 2 个视图没有约束时,按钮和文本字段都愉快地显示在列内,但是它们当然不会随 table 列宽调整大小.
我做错了什么?
编辑: 看起来还有其他问题。 NSView
本身根本没有使用 table 列调整大小。
我认为 TableCategoryView
是您的新 class,它是 NSView
的子class,将替换您在创建时获得的 NSTableCellView
(在 IB 中)基于 NSTableView
的视图。如果你真的想创建自己的 TableCellView 它应该是 NSTableCellView
的直接子 class 而不是 NSView
.
但在您的情况下(向 TableCellView 添加一个按钮)您不需要创建新的 class。现有的 TableCellView 对象已经有一个名为 textField
的 TextField(属性)。然后简单地拖(意味着:添加)一个按钮到现有的 TableCellView 中(调整它的大小并设置约束)并将一个 link 从按钮拖到 TableView 的委托中的相应方法。在 "corresponding method" 中,您可以询问点击的行和列,并识别点击按钮。我为 TableView 这样做了,对我来说效果很好。