swift - 为继承的 NSTextFieldCell 设置自定义 objectValue
问题描述
我已经成功创建了一个继承自NSTextFieldCell
. 自定义单元格需要返回一个自定义对象,而不是 textview 字符串。对于上下文,我正在尝试模拟系统偏好设置/键盘中的快捷方式网格。
到目前为止,我已经在 keyDown 上创建了自定义对象,但不确定如何返回它以在表中使用。
我将在哪里/如何设置我的对象以便可以从 tableView 中读取它?
private final class ShortcutTextFieldCellTextView: NSTextView, NSTextViewDelegate {
override func keyDown(with event: NSEvent) {
var globalKeybind: GlobalKeybindPreferences?
let textView = window?.firstResponder as? NSTextView
if let characters = event.charactersIgnoringModifiers {
let globalKeybind = GlobalKeybindPreferences.init(
function: event.modifierFlags.contains(.function),
control: event.modifierFlags.contains(.control),
command: event.modifierFlags.contains(.command),
shift: event.modifierFlags.contains(.shift),
option: event.modifierFlags.contains(.option),
capsLock: event.modifierFlags.contains(.capsLock),
carbonFlags: 0,
characters: characters,
keyCode: UInt32(event.keyCode)
)
textView?.string = globalKeybind.description
return
}
super.keyDown(with: event)
}
override func insertNewline(_ sender: Any?) {
window?.makeFirstResponder(nextResponder)
}
var originalText: String?
override func cancelOperation(_ sender: Any?) {
if let o = originalText {
self.string = o
}
window?.makeFirstResponder(nextResponder)
}
override func viewDidMoveToSuperview() {
if superview != nil {
originalText = textContainer?.textView?.string
}
}
}
final class ShortcutTextFieldCell: NSTextFieldCell {
private lazy var stfctv: ShortcutTextFieldCellTextView = {
return ShortcutTextFieldCellTextView()
}()
override func fieldEditor(for controlView: NSView) -> NSTextView? {
return stfctv
}
}
这是我想使用单元格中的自定义对象的地方。
func tableView(_ tableView: NSTableView, setObjectValue object: Any?, for tableColumn: NSTableColumn?, row: Int) {
if tableColumn == tableView.tableColumns[0] {
self.shortcuts[row].entityId = object as! String
}
if tableColumn == tableView.tableColumns[1] {
// This is where I need to use my object
self.shortcuts[row].shortcut = object as! GlobalKeybindPreferences
}
}
解决方案
推荐阅读
- python - 有没有办法从 PyPI 访问搜索结果而无需抓取?
- android - 从 webview 加载的在线页面超链接到应用程序的本地 html 页面
- python - 如何使用pyglet创建免费游戏碰撞?
- html - div 在所有桌面上的位置不一致
- android - 如何使用 Coroutines 在 Kotlin 中正确初始化 Recyclerview?
- django - Django Rest Framework - 删除问题 - 找不到 CSRF
- api - 有没有办法使用 Google Sheets API v4 获取可用的货币格式?
- continuous-integration - 如何在 CircleCI 中使用 Webpack 构建和使用 SFTP 上传文件?
- ionic-framework - 如何从 market.ionicframework.com 安装 IONIC 主题?
- python - 如何在 seaborn 线图中的特定点添加标记?