xcode – 拖放功能swift OSX
这有点复杂,但我希望有人可以帮助我.
我正在尝试为我的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) 如何确定选择了哪个文本字段(如果视图中有多个文本字段),然后通过拖放移动相应的文本字段? 拖放适用于单个静态文本字段 解决方法
我准备了一个示例应用程序,请考虑以下事项:
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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |