这有点复杂,但我希望有人可以帮助我。 我正在尝试为我的OSX应用程序构建拖放功能。
这就是目前的情况。 因此,只有一个文本字段,用户可以在视图中拖放。只有一个文本字段就足够简单,但是如果有几个文本字段,那就变得复杂了,我不知道如何处理。 这就是我目前所拥有的:
@IBOutlet weak var test: NSTextField!
@IBAction override func mouseDragged(theEvent: NSEvent) {
NSCursor.closedHandCursor().set()
var event_location = theEvent.locationInWindow
test.frame.origin.x = event_location.x - 192
test.frame.origin.y = event_location.y
}
Test是我的NSTextField的名称。我知道它的名字所以它很容易移动它。但是如果用户添加了更多的文本字段(参见左侧窗格),那么我不知道如何处理这个文本字段,因为我没有它的名称(如第一个输入的“test”)。
我通过以下代码添加文本字段:
let input = NSTextField(frame: CGRectMake(width, height, 100, 22))
self.MainView.addSubview(input)
如何确定选择了哪个文本字段(如果视图中有多个文本字段),然后通过拖放移动相应的文本字段?
拖放适用于单个静态文本字段
答案 0 :(得分:5)
我准备了一个示例应用,请考虑一下:
https://github.com/melifaro-/DraggableNSTextFieldSample
我们的想法是介绍继承SelectableTextField
的{{1}}。 NSTextField
提供了在文本字段选择事件上订阅感兴趣的听众的工具。它有SelectableTextField
块变量,您需要设置处理代码。像这样:
didSelectCallback
通过使用提到的回调机制,一旦选择了文本字段,我们就可以将其存储在textField.didSelectCallback = { (textField) in
//this peace of code will be performed once mouse down event
//was detected on the text field
self.currentTextField = textField
}
变量中。因此,当调用currentTextField
的{{1}}函数时,我们知道mouseDragged
,我们可以适当地处理它。如果是示例应用,我们需要根据拖动事件转换调整ViewController
来源。希望现在变得更好。
P.S。打开currentTextField
以继承它,因此您可以在使用NSTextField的任何地方自由使用我们的SelectableTextField,包括Interface Builder。
修改强>
我已经检查了你的样本。不幸的是,我无法向您的存储库提交/创建拉取请求,因此请在此处找到我的建议:
currentTextField