我有一个字符串类型的变量,它的值是通过PickerView更新的,当这个值被更新时,它就会更新按钮的标题,像这样:
@IBOutlet weak var selectedCountry: UIButton!
var pickedCountry: String?
func checkForPickedCountry() {
if self.pickedCountry != nil {
selectedCountry.setTitle("(pickedCountry!)", forState: .Normal);
} else {
selectedCountry.setTitle("Tap here pick a country", forState: .Normal);
}
现在就像我提到的,我使用pickerView来更新pickedCountry
的值,当从pickerView中选择一个国家时,它会显示第二个标题为selectedFlag
的按钮,该按钮会拍摄另一个pickerView来选择国家标志。现在我想听第一个pickedCountry
变量变化的原因是,这样我就可以将selectedFlag
按钮的标题更改为默认值。
这是最后的代码:
@IBOutlet weak var selectedCountry: UIButton!
@IBOutlet weak var selectedFlag: UIButton!
var pickedCountry: String?
var pickedFlag: String?
func checkForPickedCountry() {
if self.pickedCountry != nil {
selectedCountry.setTitle("(pickedCountry!)", forState: .Normal);
selectedFlag.hidden = false
} else {
selectedCountry.setTitle("Tap here pick a country", forState: .Normal);
selectedFlag.hidden = true
}
if self.pickedFlag != nil {
selectedFlag.setTitle("(pickedCountry!)", forState: .Normal);
} else {
selectedFlag.setTitle("Tap here to pick a flag", forState: .Normal)
}
现在我如何将selectedFlag
的标题设置为"当' PickedCountry '的值改变时,点击这里选择标志??
您可以使用键值观察者来监视它。
在应该查找更改的类中,执行以下操作:
添加观察者
func addObservers() {
let observerKeyLocation = "pickedConuntry"
classThatMonitors.addObserver(self, forKeyPath: observerKeyLocation, options: .New, context: nil)
}
然后,重写observerValueForKeyPath函数:
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if keyPath == observerKeyLocation {
if self.pickedCountry != nil {
selectedCountry.setTitle("(pickedCountry!)", forState: .Normal);
} else {
selectedCountry.setTitle("Tap here pick a country", forState: .Normal);
}
}
}
现在,当这个值被改变时,你的观察者会立即被更新,并且可以调用你放在它里面的代码。
请记住,如果您定义了被观察的类,您还必须删除该观察器以避免崩溃。
你可以在你的变量中实现willSet,每次变量改变时调用你的函数。你也可以修改你的函数来获得新的值,像这样:
var pickedCountry: String? {
willSet(newValue) {
guard let oldValue = str, new = newValue else { return }
if oldValue != new { //....Your value is changed }
}
}
func checkForPickedCountry(updatedValue: String) {...}
您可以使用简单的逻辑如下::
设置一个Int变量
var flag : Int = 0
现在在整个程序标志为0值
再次当你点击按钮改变它的值为1由自己。Flag = 1。同样,当你点击第二个时,让它自己为0。Flag = 0.
通过获取该标志变量的值,您将侦听该事件。
您可以通过提供值2,3,4…标记变量