- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个自定义的 NSControl
,我正在尝试让函数 edit(withFrame:editor:delegate:event:)
工作。调用它时,我希望字段编辑器出现在我的 View 中,但没有任何反应。
我已经通读了该函数的文档,并创建了一个最小示例:
class MyView: NSControl, NSControlTextEditingDelegate, NSTextDelegate {
required init?(coder: NSCoder) {
super.init(coder: coder)
isEnabled = true
}
override func mouseDown(with event: NSEvent) {
let editor = window!.fieldEditor(true, for: nil)!
let rect = bounds.insetBy(dx: 10.0, dy: 10.0)
self.edit(withFrame: rect, editor: editor, delegate: self, event: event)
}
func control(_ control: NSControl, textShouldBeginEditing fieldEditor: NSText) -> Bool {
return true
}
func control(_ control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
self.endEditing(fieldEditor)
return true
}
func textShouldBeginEditing(_ textObject: NSText) -> Bool {
return true
}
}
正如您从示例中看到的那样,我不太确定是否符合 NSControlTextEditingDelegate
或 NSTextDelegate
。我实现的功能似乎都没有被调用。
或者我可能误解了函数的目的?我应该覆盖它而不是调用它吗?
最佳答案
我不是字段编辑器方面的专家,但浏览 Apple 的文档似乎表明,它旨在在控件 NSCell 类上实现并自己呈现文本。如果希望字段编辑器出现在上面的示例中,则必须将字段编辑器插入到 View 层次结构中。它不会自动发生。
class CustomTextControl: NSControl {
override func mouseDown(with event: NSEvent) {
// Make sure
if currentEditor() == nil {
if let controlWindow = window {
if controlWindow.makeFirstResponder(controlWindow) {
// It is safe to claim the field editor
if let editor = controlWindow.fieldEditor(true, for: nil) as? NSTextView {
addSubview(editor)
editor.frame = bounds
edit(withFrame: bounds, editor: editor, delegate: nil, event: event)
}
} else {
// Some other control has first responder, force first responder to resign
controlWindow.endEditing(for: nil)
}
}
}
}
}
我建议您阅读 Apple 的 Cocoa Text Architecture Guide 文档。具体Working with the Field Editor和 NSCell文档。这是一项非常重要的任务。
我想知道你想达到什么目的。
关于swift - 如何使用NSControl的edit(withFrame :editor:delegate:event:)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54388621/
我有多个叠加的控件,可以在某些条件下处理鼠标单击。我想要做的是: 顶部控件接收mouseDown:事件。 顶部控件决定是否处理 mouseDown: 事件。 如果是这样,请采取措施并阻止其他控件接收
我正在尝试创建一个复杂的自定义 NSControl,它必须能够发送多条消息。 例如,鼠标悬停时必须发送一个操作,而鼠标拖动时必须发送另一个操作。 我无法理解如何将目标连接到控件并使控件向目标发送任何消
我正在 macOS 中构建一个具有动态本地化功能的 UI 应用程序(这意味着可以在应用程序运行时切换语言)。 我注意到,如果初始语言配置为日语,并且我即时切换为英语,则控件上的文本呈现正常。然而,在相
我正在使用 Swift 为 OSX 编写应用程序,我正在寻找一种在 NSControl 上捕获事件的好方法。显然,我进行了搜索,但我发现的信息往往不清楚或过时。就我而言,我想在 NSTextField
以下代码: - (void) setTarget:(id)anObject { NSLog(@"anObject: %@",anObject); [super setTarget:
我正在开发一个自定义 slider 来支持颜色选择功能。这是迄今为止当前开发的屏幕截图: 背景颜色非常灵活,还可以使用 NSSlider 中使用系统颜色实现的标准背景颜色。 该实现是通过重写 NSVi
我有一个自定义 NSControl,它充当二维 slider ,您可以在 View 周围拖动 handle 。我添加了一些类特定的方法,我覆盖的唯一方法是鼠标操作和drawRect。我的问题是,如何让
我有一个自定义控件。如果它继承自NSView,当我点击它时它会自动成为第一响应者。如果它继承自 NSControl,则不会。即使我重写 mouseDown(with:) 并且不调用 super,这种行
所以我已经好几年没有研究过 Swift/Cocoa 了。我刚刚使用 Xcode 10.0 创建了一个简单的 macOS 应用程序,发现 NSControl 不再具有 addTarget(...) 方法
我有一个 NSControl 子类(它被配置为层托管 View ,尽管我怀疑这是否相关)。我一直在尝试编写代码来获取并显示上下文菜单。但是,menuForEvent: 或 rightMouseDown
我有一个问题...正在寻找与 NSControl 的 sendActionsForControlEvents(来自 iOS UIControl)类似的方法? Mac 上有类似的东西吗?我需要获取有关更
我正在创建一个菜单栏应用程序,其中包含几个弹出窗口、一个 NSMenu 和一些用于设置之类的常规窗口。我创建了一个 NSController 将所有 StatusBar 内容放在一起并通知弹出窗口打开
我构建了一个自定义 IKImageBrowserCell,它可以在 IKImageBrowser 中显示我的图像,没有任何问题。 我想尝试覆盖内置的 IKImageBrowser 删除图像功能。目前“
我来自 iOS 背景,在创建自定义控件时,您只需继承 UIControl。我正在尝试构建一个自定义的 NSSlider(一个有 2 个旋钮而不是一个)并注意到有 2 个类来处理 NSControl 和
我将要实现一个简单的音频推子。我将 NSSlider 和 NSSliderCell 子类化,以便能够相应地绘制图形。 只要在按下 Cmd 键的情况下单击 handle ,我希望 slider 跳到定义
上下文: Apple 在 macOS 上“软弃用”了 NSCell。我试图减少它在我的自定义 NSControl 子类中的使用,而是使用 CALayers 来处理我的绘图。为此,我将 NSButton
具体来说,我想让 NSTokenField 忽略鼠标事件,因为我在 NSTableCellView 中使用它只是为了以标记化方式显示数据,而不允许任何编辑。 设置标记字段的 enabled = NO
我正在寻找一个最小的可行示例。我已经用谷歌搜索和阅读了好几天了,但找不到任何最新的资源。 我的 NSControl 工作正常,但是一旦我添加 + (Class)cellClass { retu
我正在编写一些自定义布局代码来对齐一些 NSView。我循环遍历所有 View 并将它们的frame.origin.x 设置为相同的值(左对齐),但 View 看起来没有正确对齐。我在 Interfa
我已经将一个 NSSlider 子类化,无论是否按下 option 键,它的行为都不同。为此,我覆盖了 mouseDown 函数。它似乎完成了这项工作。问题是,我注意到我的 ViewControlle
我是一名优秀的程序员,十分优秀!