拖放功能swift OSX

时间:2016-05-08 20:28:23

标签: xcode swift macos drag-and-drop

这有点复杂,但我希望有人可以帮助我。 我正在尝试为我的OSX应用程序构建拖放功能。

enter image description here

这就是目前的情况。 因此,只有一个文本字段,用户可以在视图中拖放。只有一个文本字段就足够简单,但是如果有几个文本字段,那就变得复杂了,我不知道如何处理。 这就是我目前所拥有的:

@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)

如何确定选择了哪个文本字段(如果视图中有多个文本字段),然后通过拖放移动相应的文本字段?

拖放适用于单个静态文本字段

1 个答案:

答案 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