gpt4 book ai didi

xcode - 拖放功能 swift OSX

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:52 29 4
gpt4 key购买 nike

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

enter image description here

这就是它现在的样子。所以只有一个文本字段,用户可以在 View 周围拖放。只有一个文本字段就足够简单了,但是如果有多个文本字段,它就会变得很复杂,我不知道如何处理。这是我目前拥有的:

@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 的名称。我知道它的名字,所以很容易移动它。但是,如果用户添加了更多文本字段(请参阅左 Pane ),那么我不知道如何处理该文本字段,因为我没有它的名称(例如第一个输入的“测试”)。

我正在通过这段代码添加文本字段:

    let input = NSTextField(frame: CGRectMake(width, height, 100, 22))
self.MainView.addSubview(input)

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

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

最佳答案

我已经准备了一个示例应用程序,所以考虑一下:

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

思路是引入继承NSTextFieldSelectableTextFieldSelectableTextField 为感兴趣的监听器订阅文本字段选择事件提供便利。它有 didSelectCallback block 变量,您需要在其中设置处理代码。像这样:

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 变量中。因此,当 ViewControllermouseDragged 函数被调用时,我们知道 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
}

关于xcode - 拖放功能 swift OSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104493/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com