加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xcode – 拖放功能swift OSX

发布时间:2020-12-14 17:51:49 所属栏目:百科 来源:网络整理
导读:这有点复杂,但我希望有人可以帮助我. 我正在尝试为我的OSX应用程序构建拖放功能. 这就是目前的情况. 因此,只有一个文本字段,用户可以在视图中拖放.只有一个文本字段就足够简单,但是如果有几个文本字段,那就变得复杂了,我不知道如何处理. 这就是我目前拥有的
这有点复杂,但我希望有人可以帮助我.
我正在尝试为我的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)

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

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

解决方法

我准备了一个示例应用程序,请考虑以下事项:

https://github.com/melifaro-/DraggableNSTextFieldSample

我们的想法是引入继承NSTextField的SelectableTextField. 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变量中.因此,当调用ViewController的mouseDragged函数时,我们知道currentTextField,我们可以适当地处理它.在示例应用程序的情况下,我们需要根据拖动事件转换调整currentTextField原点.希望现在变得更好.

附:打开NSTextField以继承它,因此您可以在使用NSTextField的任何地方自由使用我们的SelectableTextField,包括Interface Builder.

编辑

我检查了你的样品.不幸的是,我无法向您的存储库提交/创建拉取请求,因此请在此处找到我的建议:

override func viewDidLoad() {
    super.viewDidLoad()

    didButtonSelectCallback = { (button) in

        if let currentButton = self.currentButton {

            currentButton.highlighted = !currentButton.highlighted

            if currentButton == button {
                self.currentButton = nil
            } else {
                self.currentButton = button
            }
        } else {
            self.currentButton = button
        }

        button.highlighted = !button.highlighted
    }

    addButtonAtRandomePlace()
    addButtonAtRandomePlace()

    didButtonSelectCallback(button: addButtonAtRandomePlace())
}

override func mouseDragged(theEvent: NSEvent) {

    guard let button = currentButton else {
        return
    }

    NSCursor.closedHandCursor().set()

    button.frame.origin.x += theEvent.deltaX
    button.frame.origin.y -= theEvent.deltaY
}

private func addButtonAtRandomePlace() -> SelectableButton {

    let viewWidth = self.view.bounds.size.width
    let viewHeight = self.view.bounds.size.height

    let x = CGFloat(rand() % Int32((viewWidth - ButtonWidth)))
    let y = CGFloat(rand() % Int32((viewHeight - ButtonHeight)))

    let button = SelectableButton(frame: CGRectMake(x,y,ButtonWidth,ButtonHeight))
    button.setButtonType(NSButtonType.ToggleButton)
    button.alignment = NSCenterTextAlignment
    button.bezelStyle = NSBezelStyle.RoundedBezelStyle
    button.didSelectCallback = didButtonSelectCallback
    self.view.addSubview(button)

    return button
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读