iOS-视图控制器响应uiview中的数据更改
我在别人编写的视图控制器中使用了一个颜色选择器(UIView子类),它包含几个处理触摸事件的子视图。颜色选择器有一个公共变量“color”,当用户与子视图交互时,它会更新iOS-视图控制器响应uiview中的数据更改,ios,objective-c,swift,uiview,uiviewcontroller,Ios,Objective C,Swift,Uiview,Uiviewcontroller,我在别人编写的视图控制器中使用了一个颜色选择器(UIView子类),它包含几个处理触摸事件的子视图。颜色选择器有一个公共变量“color”,当用户与子视图交互时,它会更新 public class SwiftHSVColorPicker: UIView { var colorWheel: ColorWheel! ... public var color: UIColor! ... } 见: 我在视图控制器中引用了此颜色选择器视图和标签: @IBOutlet w
public class SwiftHSVColorPicker: UIView {
var colorWheel: ColorWheel!
...
public var color: UIColor!
...
}
见:
我在视图控制器中引用了此颜色选择器视图和标签:
@IBOutlet weak var colorPicker: SwiftHSVColorPicker!
@IBOutlet weak var output: UILabel!
当“颜色”数据从颜色选择器视图更改时,如何更新标签文本 有两种方法: 一, 二,
动态公共变量颜色:UIColor!//添加动态关键字
colorPicker.addObserver(self,forKeyPath:“color”,选项:[.Initial,.New],context:nil)//为颜色添加观察者
重写func observeValueForKeyPath(键路径:String?,对象对象的类型:AnyObject?,更改:[String:AnyObject]?,上下文:UnsafeMutablePointer){
//对颜色做点什么
如果让颜色=更改![NSKeyValueChangeNewKey]为?UIColor{
self.label.textColor=颜色
}
}
谢谢你的回答,它就像一个符咒!我只是在Android中找不到与回调/侦听器等效的iOS。。。
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
}
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
}
}