目前我在 View 中有多个文本字段。如果用户点击其中一个,应该有一个函数响应该事件。有没有办法使用react(如果文本字段获得焦点)?我尝试使用 NSTextFieldDelegate 方法,但没有适合此事件的函数。
这是我的代码目前的样子:
class ViewController: NSViewController, NSTextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let textField = NSTextField(frame: CGRectMake(10, 10, 37, 17))
textField.stringValue = "Label"
textField.bordered = false
textField.backgroundColor = NSColor.controlColor()
view.addSubview(textField)
textField.delegate = self
let textField2 = NSTextField(frame: CGRectMake(30, 30, 37, 17))
textField2.stringValue = "Label"
textField2.bordered = false
textField2.backgroundColor = NSColor.controlColor()
view.addSubview(textField2)
textField2.delegate = self
}
func control(control: NSControl, textShouldBeginEditing fieldEditor: NSText) -> Bool {
print("working") // this only works if the user enters a charakter
return true
}
}
textShouldBeginEditing
函数仅在用户尝试输入字符时处理该事件,但这不是我想要的。如果他单击文本字段,它必须处理该事件。
有什么想法吗,非常感谢?
编辑
func myAction(sender: NSView)
{
print("aktuell: \(sender)")
currentObject = sender
}
这是我要调用的函数。
最佳答案
1) 创建 NSTextField 的子类。
import Cocoa
class MyTextField: NSTextField {
override func mouseDown(theEvent:NSEvent) {
let viewController:ViewController = ViewController()
viewController.textFieldClicked()
}
}
2) 通过界面构建,选择您想要关注的文本字段。导航到右侧 Pane 中的自定义类。然后将文本字段的类设置为您刚刚创建的类。
3) 以下是 ViewController 的示例。
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
func textFieldClicked() -> Void {
print("You've clicked on me!")
}
}
4)以编程方式添加文本字段...
import Cocoa
class ViewController: NSViewController {
let myField:MyTextField = MyTextField()
override func viewDidLoad() {
super.viewDidLoad()
//let myField:MyTextField = MyTextField()
myField.setFrameOrigin(NSMakePoint(20,70))
myField.setFrameSize(NSMakeSize(120,22))
let textField:NSTextField = NSTextField()
textField.setFrameOrigin(NSMakePoint(20,40))
textField.setFrameSize(NSMakeSize(120,22))
self.view.addSubview(myField)
self.view.addSubview(textField)
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
func textFieldClicked() -> Void {
print("You've clicked on me!")
}
}
关于Swift 函数文本字段获得焦点 OSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37493657/