NSTextView 中的按键事件(macOS)
Key pressed event in NSTextView (macOS)
我正在 Swift 中为 macOS 编写代码(所以我使用的是 AppKit,而不是 UIKit)。
我有一个不可编辑的 NSTextView。
我想模拟一种终端。
下面的代码理解用户何时按下 RETURN 并打印“>>\n”。我希望能够在用户按下任意键时得到通知,以便写入相应的键。例如,如果用户按下 BACKSPACE,我将从 NSTextView 中删除一个字符,除非要删除“>>”。
这是代码。
导入 Cocoa
class ViewController: NSViewController {
@IBOutlet var console: Console!
override func viewDidLoad() {
super.viewDidLoad()
console.parent = self
}
func newLine() {
let textStorage = console.textStorage
if(textStorage != nil) {
let myString = "\n>>"
let myAttribute = [ NSForegroundColorAttributeName: NSColor.greenColor(), NSFontAttributeName: NSFont(name: "Menlo Regular", size: 13.0)! ]
let myAttrString = NSAttributedString(string: myString, attributes: myAttribute)
textStorage!.appendAttributedString(myAttrString)
let length = console.string!.characters.count
console.setSelectedRange(NSRange(location: length,length: 0))
console.scrollRangeToVisible(NSRange(location: length,length: 0))
}
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
class Console : NSTextView {
var parent: ViewController?
override func insertNewline(sender: AnyObject?) {
parent!.newLine()
}
override func controlTextDidBeginEditing(obj: NSNotification) {
NSLog("wow") //unfortunately this method is never called, even setting the NSTextView as Editable
}
}
相关问题:How to capture user input in real time in NSTextField?
您可以为常规按键覆盖 NSTextView 的 keyDown(with event: NSEvent)
。并检查 event.charactersIgnoringModifiers
或 event.modifierFlags
以了解按下了哪个键。
我正在 Swift 中为 macOS 编写代码(所以我使用的是 AppKit,而不是 UIKit)。 我有一个不可编辑的 NSTextView。 我想模拟一种终端。 下面的代码理解用户何时按下 RETURN 并打印“>>\n”。我希望能够在用户按下任意键时得到通知,以便写入相应的键。例如,如果用户按下 BACKSPACE,我将从 NSTextView 中删除一个字符,除非要删除“>>”。
这是代码。 导入 Cocoa
class ViewController: NSViewController {
@IBOutlet var console: Console!
override func viewDidLoad() {
super.viewDidLoad()
console.parent = self
}
func newLine() {
let textStorage = console.textStorage
if(textStorage != nil) {
let myString = "\n>>"
let myAttribute = [ NSForegroundColorAttributeName: NSColor.greenColor(), NSFontAttributeName: NSFont(name: "Menlo Regular", size: 13.0)! ]
let myAttrString = NSAttributedString(string: myString, attributes: myAttribute)
textStorage!.appendAttributedString(myAttrString)
let length = console.string!.characters.count
console.setSelectedRange(NSRange(location: length,length: 0))
console.scrollRangeToVisible(NSRange(location: length,length: 0))
}
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
class Console : NSTextView {
var parent: ViewController?
override func insertNewline(sender: AnyObject?) {
parent!.newLine()
}
override func controlTextDidBeginEditing(obj: NSNotification) {
NSLog("wow") //unfortunately this method is never called, even setting the NSTextView as Editable
}
}
相关问题:How to capture user input in real time in NSTextField?
您可以为常规按键覆盖 NSTextView 的 keyDown(with event: NSEvent)
。并检查 event.charactersIgnoringModifiers
或 event.modifierFlags
以了解按下了哪个键。