macos - NSTableView 中的自定义 NSView 不显示所有 subview

标签 macos swift interface-builder nstableview nsview

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

Creating constraints

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

现在,当在 NSTableView 中显示此自定义 NSView 时,按钮看起来好像消失了,并且调整列大小会使文本字段随之调整大小('类别列)。

Button is gone

用于在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/

相关文章:

macos - 无法在 OSX Mavericks 上重启 Postgres - 'Operation already in progress'?

macos - 为符号链接(symbolic link)设置图标

macos - OS X 终端文本堆叠在自身之上

ios - NSJSONSerializer 如何确定给定数据的编码?

objective-c - 当使用基于 View 的 NSOutlineView (源列表)使用绑定(bind)时,是否可以根据某些条件不显示数据源中的行?

swift - 异步自动释放池

ios - 点击外部后 DatePicker 未关闭

打开时出现 Swift 和 Sqlite3 错误

c# - 不符合键值编码(Monotouch 和 iOS 6)

ios - 在标签栏 Controller 中嵌入 'show' segues