繁体   English   中英

在NSTableCellView firstResponder()中创建NSTextField

[英]make NSTextField in NSTableCellView firstResponder()

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

  1. tableView是基于视图,而不是基于单元格(属性检查器)
  2. tableView.reloadData()不够快。 使用insertRow(在[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以我想要的方式工作。 我是一个初学者,并且在处理类,继承和视图方面给我带来了很多麻烦。

截图,NSTextField已激活

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

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

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

到目前为止我尝试过:

class NSTextFieldSubClass: NSTextField {

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

}

我也玩过细胞的绑定(或准确地说是NSTextField本身),但是因为我真的不知道我的方式它们无处可去

我认为是要走的路:

在创建单元格时使NSTextField成为第一个响应者,但我不知道如何。 任何帮助是极大的赞赏!!

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

编辑:

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

class NSTextFieldSubClass: NSTextField {

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

}

编辑截图:

这些是联系

EDIT2:

edit2:属性检查器tableView

EDIT3:

edit3:绑定NSTextField

edit4:

edit4:错误

在'+'按钮的动作方法结束时,添加行后:

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)
            }
        }
    }
})

不要子类化NSTextField 您可以在基于视图的表视图中使文本字段成为开箱即用的第一响应者。

这很容易。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM