表格行

时间:2018-03-01 02:16:06

标签: swift nstableview addsubview

我查找了标题中列出的所有3个功能的问题的帖子,但我的问题不在任何地方讨论。坦率地说,我的问题是它无视逻辑恕我直言。

在基于视图的NSTableView中选择行时,我想在我的上一个(又名“操作”)列中显示“保存”按钮。所以在viewDidLoad()我创建了我的孤儿按钮。然后在tableViewSelectionDidChange()上将其从超级视图中删除,并将其添加到我的列NSTableCellView。如果没有选择行,则无法显示任何按钮。简单。下面的代码完美无缺。

func tableViewSelectionDidChange(_ notification: Notification) {
    let selectedRow = tableView.selectedRow
    btnSave!.removeFromSuperview()
    if selectedRow > -1,
        let rowView = rowView(selectedRow),
        let actionView = rowView.view(atColumn: Column.action.hashValue) as? NSTableCellView {
        actionView.addSubview(btnSave!)
    }
}

等待。我说完美吗?只要我使用鼠标来更改所选行,它就会起作用,包括在表格的最后一行下方选择,这将删除选择和前一个选定行中的任何按钮。但是,当我使用键盘上/下键更改选择时,它不起作用。

首先,我认为只有在使用鼠标更改行选择时才会调用该函数。然而,事实并非如此。根据文档和事实,tableViewSelectionIsChanging都是如此。但是对于tableViewSelectionDidChange文档,并没有说它仅在使用鼠标时才有效,事实证明了这一点。我把print语句和函数调用了。我也通过了调试器。令人难以置信的部分是 - 从superview工作中删除按钮的方法,但是添加按钮作为子视图的方法不起作用 - 并且仅当我使用键盘时。如何执行相同的确切代码但我得到两个不同的结果?

添加剩余功能

我用它来获取选定的行

private func rowView(_ rowIndex: Int, _ make: Bool = false) -> NSTableRowView? {
        return tableView.rowView(atRow: rowIndex, makeIfNecessary: make)
    }

我在viewDidLoad中调用它来创建我的孤儿按钮

private func createButton() {
    btnSave = NSButton(frame: NSRect(x: 10, y: 0, width: 22, height: 16))
    btnSave?.title = "S"
    btnSave?.setButtonType(.momentaryPushIn)
    btnSave?.bezelStyle = .roundRect
}

0 个答案:

没有答案