如何在OS X中对鼠标的标签控制采取行动

时间:2016-02-06 19:25:31

标签: swift macos

在我的类ViewController:NSViewController

我有以下代码:

@IBAction override func mouseDown(theEvent: NSEvent) {

    self.myLabel.textColor = NSColor.redColor()
    //either of these work to set the labels text value
    self.myLabel.objectValue = "Hello World"
    self.myLabel.stringValue = "This is a test"

    switch(self) {
    case self.myLabel:
        //change text of myLabel
        break;
    case self.myLabel1:
        //change text of myLabel1
        break;
    case self.myLabel2:
        //change text of myLabel2
        break;
    }

}

这可以改变名为myLabel的Label Control的文本和颜色,但是我在View上有3个Label控件如何更改发送鼠标按下事件的颜色?我能想到的唯一方法就是使用上面代码中的switch语句。但是我认为有一些更好的方法可以使用事件的发送者吗?

我是OS X和Mac开发的新手,来自.NET C#世界,所以感谢帮助这个Mac菜鸟!使用最新的Swift和Xcode。

1 个答案:

答案 0 :(得分:0)

我确实弄清楚如何确定我的NSTextField控件是否在视图的mouseDown事件中被单击:

@IBAction override func mouseDown(theEvent: NSEvent) {

    var event_location: NSPoint!
    event_location = theEvent.locationInWindow

    self.mouseDownEvent = theEvent

    var cntrl_id = NSTextField()
    var cntrl_frame = NSRect()
    var cntrl_name = String()
    var cntrl_value = String()
    var hit = Bool()

    for view in self.view.subviews as [NSView] {
        if let ct = view as? NSTextField {
            cntrl_name = ct.identifier!
            cntrl_id = ct
            cntrl_frame = ct.frame
            cntrl_value = ct.stringValue
            hit = cntrl_frame.contains(event_location)
            if hit {
                controlToMove = cntrl_id
                break
            }
        }
    }


}

可能有一些方法可以提高效率,例如在视图上保留所有NSTextField控件的字典,然后 检查字典是否在其中一个控件上有“点击”。