gpt4 book ai didi

macos - NSTableCellView 中的 NSTextField - 结束失去焦点的编辑

转载 作者:行者123 更新时间:2023-12-03 16:20:12 25 4
gpt4 key购买 nike

我有一个带有基于 View 的 NSTableView 的 View (它本身有一个带有单个文本字段的单元格 View )以及 TableView 外部的一些按钮和文本字段。其中一个按钮将一个对象添加到 TableView 的数据源中,并将行插入 TableView 后,立即使其可编辑。

如果用户输入文本并按下返回键,我会收到 - (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor 委托(delegate)方法,我可以运行我的验证并保存该值。但是,如果用户选择 TableView 之外的任何其他按钮或文本字段,则不会调用委托(delegate)。

检测 NSTableCellView 内的文本字段失去焦点的最佳方法是什么,以便我可以在 tableview 条目上运行一些验证代码?

最佳答案

如果我理解正确,您希望在以下情况下触发 control:textShouldEndEditing: 通知:

  1. 您将一个新对象添加到数组 Controller 。
  2. 系统会自动选择表格中代表该对象的行。
  3. 您可以通过编程方式选择相关行中的文本字段进行编辑。
  4. 用户立即(即无需在文本字段中进行任何编辑)将焦点移至 UI 中其他位置的控件

我过去使用的一种方法是在文本字段可供用户编辑之前,对与文本字段关联的字段编辑器进行无关紧要的编程更改。下面的代码片段展示了如何执行此操作 - 这是上述场景中的步骤 2/步骤 3:

func tableViewSelectionDidChange(notification: NSNotification) {
if justAddedToArrayController == true {
// This change of selection is occurring because the user has added a new
// object to the array controller, and it has been automatically selected
// in the table view. Now need to give focus to the text field in the
// newly selected row...

// Access the cell
var cell = tableView.viewAtColumn(0,
row: arrayController.selectionIndex,
makeIfNecessary: true) as NSTableCellView

// Make the text field associated with the cell the first responder (i.e.
// give it focus)
window.makeFirstResponder(cell.textField!)

// Access, then 'nudge' the field editor - make it think it's already
// been edited so that it'll fire 'should' messages even if the user
// doesn't add anything to the text field
var fe = tableView.window?.fieldEditor(true, forObject: cell.textField!)
fe!.insertText(cell.textField!.stringValue)
}
}

关于macos - NSTableCellView 中的 NSTextField - 结束失去焦点的编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27322855/

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