在iOS里,可以添加觀察者模式,來實現(xiàn)某個property更改后的變化【可以在我們自定義的對象上添加KVO,也可以在UI控件的屬性上添加KVO】。
通常在tableView、scrollView等有滑動事件的中使用,實時監(jiān)聽相應(yīng)的相對位置等屬性
添加KVO監(jiān)聽
[object addObserver: observer forKeyPath:@"自定義對象的屬性,或者某個控件的屬性等" options: 0 context: nil];
參數(shù)介紹:
object : 被觀察對象
observer: 觀察對象
forKeyPath里面帶上property的name,如UIView的frame、center等等
options: 有4個值,分別是:
NSKeyValueObservingOptionNew 把更改之前的值提供給處理方法
NSKeyValueObservingOptionOld 把更改之后的值提供給處理方法
NSKeyValueObservingOptionInitial 把初始化的值提供給處理方法,一旦注冊,立馬就會調(diào)用一次。通常它會帶有新值,而不會帶有舊值。
NSKeyValueObservingOptionPrior 分2次調(diào)用。在值改變之前和值改變之后。
注:例子里的0就代表不帶任何參數(shù)進去
context: 可以帶入一些參數(shù),其實這個挺好用的,任何類型都可以,自己強轉(zhuǎn)就好了。
監(jiān)聽事件
- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context {
if([keyPathisEqualToString:@"contentOffset"]) {
NSLog(@"object == %@",object);
NSLog(@"context == %@",context);
NSLog(@"change == %@",change);
}}
參數(shù)介紹:
keyPath: 對應(yīng)forKeyPath
object: ?被觀察的對象
change: ?對應(yīng)options里的NSKeyValueObservingOptionNew、NSKeyValueObservingOptionOld等
context: 對應(yīng)context