gpt4 book ai didi

swift - 按下 Shift 键时强制小写

转载 作者:行者123 更新时间:2023-11-30 12:05:12 26 4
gpt4 key购买 nike

我是一名初级 MacOS 开发人员。在 Swift 4 Cocoa 中,我希望文本字段能够对 Shift 键进行“特殊”处理。

默认情况下,如果输入字母,则应为大写,但如果按下 Shift 键,则字母应为小写。

示例:

  • 输入“a” -> 转换为“A”
  • 输入 Shift+“a” -> 转换为“a”
  • 任何其他条目(数字等)都应正常处理 -

我能够强制使用大写

override func controlTextDidChange(_ obj: Notification) {
print("Text changed")

var infoDictionary:Dictionary = obj.userInfo! as Dictionary
let text:NSText = infoDictionary["NSFieldEditor"] as! NSText
text.string = text.string.uppercased()
}

但是我不知道如何在按下 Shift 键时“强制”小写。

我非常感谢您的阅读和...帮助。

最佳答案

文本字段中的击键由 The Field Editor 处理。字段编辑器是一个 NSTextView ,并且 NSTextView 实现了 NSTextInputClient 协议(protocol)。创建 NSTextView 的子类并重写 insertText(_:replacementRange:) 以更改输入字符串的大小写。

class MyTextView: NSTextView {

override func insertText(_ string: Any, replacementRange: NSRange) {
var newString = string

if let oldString = string as? String {
if (NSApp.currentEvent?.modifierFlags.contains(.shift))! {
newString = oldString.lowercased()
}
else {
newString = oldString.uppercased()
}
}
// handle string is a NSAttributedString

super.insertText(newString, replacementRange:replacementRange)
}

}

子类 NSTextFieldCell 并重写 fieldEditor(for:) 以返回 NSTextView 子类的实例。

class MyTextFieldCell: NSTextFieldCell {

var myFieldEditor:MyTextView? = nil

override func fieldEditor(for controlView: NSView) -> NSTextView? {
if (myFieldEditor == nil) {
myFieldEditor = MyTextView()
myFieldEditor?.isFieldEditor = true
}
return myFieldEditor
}

}

将文本字段的单元格的类设置为MyTextFieldCell

关于swift - 按下 Shift 键时强制小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46756388/

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