2016-05-06 5 views
1

Ich verwende eine Farbe Picker (UIView Subklasse) in meinem View-Controller von jemand anderem geschrieben, und es enthält mehrere Teilansichten, die Berührungsereignisse behandelt. Die Farbauswahl hat eine öffentliche Variable "color", und es ist aktualisiert, wenn der Benutzer mit den Unteransichten interagiert.iOS - View Controller reagieren auf Daten ändern von uiview

public class SwiftHSVColorPicker: UIView { 
    var colorWheel: ColorWheel! 
    ... 

    public var color: UIColor! 
    ... 
} 

See: https://github.com/johankasperi/SwiftHSVColorPicker/blob/master/Source/SwiftHSVColorPicker.swift

ich diese Farbauswahl Sicht verwiesen haben, und ein Etikett in meiner Ansicht-Controller:

@IBOutlet weak var colorPicker: SwiftHSVColorPicker! 
@IBOutlet weak var output: UILabel! 

Wie kann ich den Beschriftungstext aktualisieren , wenn die "Farbe" Daten ändern sich aus der Farbauswahl-Ansicht?

Antwort

1

Wenn möglich, dass Sie es ändern müssen gibt es zwei Möglichkeiten:

1.

var colorChanged : ((UIColor!)->())?// add a callback for the colorpicker 

func hueAndSaturationSelected(hue: CGFloat, saturation: CGFloat) { 
    self.hue = hue 
    self.saturation = saturation 
    self.color = UIColor(hue: self.hue, saturation: self.saturation, brightness: self.brightness, alpha: 1.0) 
    brightnessView.setViewColor(self.color) 

    self.colorChanged?(self.color) //call it at this method 

    selectedColorView.setViewColor(self.color) 
} 

colorPicker.colorChanged = {[weak self] color in 

     self?.label.textColor = color //do something with your label 

} 

2.

dynamic public var color: UIColor! // add the dynamic keyword 
colorPicker.addObserver(self, forKeyPath: "color", options:[.Initial, .New], context: nil) // add an observer for the color 


override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    //do something with the color 
    if let color = change![NSKeyValueChangeNewKey] as? UIColor { 
     self.label.textColor = color 
    } 

} 
+0

Danke für die Antwort und es wirkt wie ein Zauber! Ich konnte einfach kein iOS finden, das Callbacks/Listenern in Android entspricht ... –

Verwandte Themen