2016-02-06 56 views
0

在我班上的ViewController:NSViewController如何作用於鼠標在OS下的標籤控制X

我有以下代碼:

@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,但在視圖上有3個Label控件如何更改發送鼠標按下事件的顏色?我能想到的唯一方法就是使用switch語句,就像上面的代碼一樣。但我認爲有些如何使用事件的發件人有更好的方法?

我是OS X和Mac開發人員的新手,來自.NET C#世界,非常感謝您幫助Mac的noob!使用最新的Swift和Xcode。

+0

其實我只是試過了開關(self),它在運行時不起作用? –

+0

基本上我的問題歸結爲:如果您在視圖上有多個標籤控件,並且您在該標籤上點擊鼠標控件,您如何檢測您點擊哪個控件並修改代碼中該標籤控件的文本或顏色?在我的mouseDown函數? –

回答

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控件中,然後 檢查字典是否在其中一個控件上有「命中」。