在 NSTableCellView 中创建 NSTextField firstResponder()

fel*_*xmp 5 macos nstextfield nstableview swift

对于那些不喜欢阅读 20 条评论以寻找答案的人。这是对我有用的:

  1. tableView 是基于视图的,而不是基于单元格的(属性检查器)
  2. tableView.reloadData() 不够快。使用 insertRow(at[0]:withAnimation:.leftSlide) 代替工作正常
  3. 确保 NSTextField 和 NSTextFieldCell 是可编辑的(属性检查器)

最终代码:

tableViewAlarms.insertRows(at: [0], withAnimation: .effectFade)

let keyView = tableViewAlarms.view(atColumn: 0, row: 0, makeIfNecessary: false) as! NSTableCellView

self.view.window!.makeFirstResponder(keyView.textField)
Run Code Online (Sandbox Code Playgroud)

问题:

有一个问题。我一直坚持让我的 NSTableView 按照我想要的方式工作。我是一个初学者,使用类、继承和视图给我带来了很多麻烦。

屏幕截图,NSTextField 被激活

您可以通过按“+”按钮向 NSTableView 添加一行。

第一个 tableColumn 中的 NSTextField 是可编辑的,双击时开始编辑

现在我希望在添加一行时自动激活第一列中的 NSTextField(显示光标,通过键盘响应文本输入)。

到目前为止,我已经尝试过:

class NSTextFieldSubClass: NSTextField {

    override func becomeFirstResponder() -> Bool {
        return true
    }

}
Run Code Online (Sandbox Code Playgroud)

我还使用了单元格的绑定(或者准确地说是 NSTextField 本身),但是由于我真的不知道如何绕过这些,所以它无处可去

我认为是要走的路:

创建单元格时使 NSTextField 成为 firstResponder,但我不知道如何。任何帮助是极大的赞赏!!

另外:当光标闪烁时,NSTextField 的状态究竟是如何调用的?

编辑:

至于子类,这就是我尝试的全部:

class NSTextFieldSubClass: NSTextField {

    override func becomeFirstResponder() -> Bool {
        return true
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑截图:

这些是连接

编辑2:

edit2:属性检查器 tableView

编辑3:

edit3:绑定 NSTextField

编辑4:

编辑4:错误

vad*_*ian 2

不要子类化NSTextField。您可以立即将基于视图的表视图中的文本字段设置为第一响应者。

这很容易。

假设您知道row并且column(在示例中的第 0 行和第 0 列中)获取表格单元格视图并使view(atColumn: 0, row文本字段成为第一响应者。

let keyView = tableView.view(atColumn: 0, row: 0, makeIfNecessary: false) as! NSTableCellView
view.window!.makeFirstResponder(keyView.textField)
Run Code Online (Sandbox Code Playgroud)

第二个出口是做什么用的?只需使用标准默认值即可textField