gpt4 book ai didi

swift - 在 NSTableCellView 中创建 NSTextField firstResponder()

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:20 25 4
gpt4 key购买 nike

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

  1. tableView 是基于 View 的,而不是基于单元格的(属性检查器)
  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)

问题:

有一个问题。我被困了一段时间让我的 NSTableView 按照我想要的方式工作。我是初学者,使用类、继承和 View 给我带来了很多麻烦。

screenshot, the NSTextField is activated

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

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

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

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

class NSTextFieldSubClass: NSTextField {

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

}

我还玩弄了单元格的绑定(bind)(或者准确地说是 NSTextField 本身),但是因为我真的不知道如何解决这些问题,所以它无处可去

我认为要走的路:

在创建单元格时使 NSTextField 成为 firstResponder,但我不知道如何做。非常感谢任何帮助!!

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

编辑:

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

class NSTextFieldSubClass: NSTextField {

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

}

编辑截图:

these are the connections

编辑2:

edit2: attributes inspector tableView

编辑3:

edit3: bindings NSTextField

编辑4:

edit4: error

最佳答案

在“+”按钮的操作方法的末尾,添加行后执行:

DispatchQueue.main.async(execute: {
// get the cell view
let view = self.tableView.view(atColumn: 0, row: row, makeIfNecessary: false)
if let cellView = view as? NSTableCellView {
// get the text field
if let textField = cellView.textField {
// make the text field first responder
if textField.acceptsFirstResponder {
self.tableView.selectRowIndexes(IndexSet(integer:row), byExtendingSelection: false)
self.tableView.window?.makeFirstResponder(textField)
}
}
}
})

关于swift - 在 NSTableCellView 中创建 NSTextField firstResponder(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49327072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com