我正在尝试为我的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}总结
以上是内存溢出为你收集整理的xcode – 拖放功能swift OSX全部内容,希望文章能够帮你解决xcode – 拖放功能swift OSX所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)