我想了解iOS中的關鍵值觀察,但我認爲我沒有正確地做某件事。 作爲一個想法,我試圖添加一個觀察者到視圖控制器的屬性(與IBOutlet連接的視圖)。這個視圖(tableIndicator)是動畫的,所以我想看看當視圖的框架發生變化時是否可以讓觀察者作出反應。KVO不能用於類屬性
所以我做了以下內容,視圖控制器的viewDidLoad裏面:
[tableInidicator addObserver:self forKeyPath:@"frame" options:0 context:nil];
tableIndicator
是我的看法/類屬性,我添加默認選項視圖控制器(個體經營)作爲觀察員,0和框架作爲觀察的關鍵值。
然後,我在等待,看看這個功能被觸發爲框架的變化:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"value changed");
}
...但沒有任何反應。
我不一定在尋找解決這個問題的方法,因爲除了我理解它之外,沒有任何其他目的,如果有人能指出我做錯了什麼,我會非常感激。一些很好的例子/教程也會很棒。
我發現的那些(http://iphonedevelopment.blogspot.ro/2009/02/kvo-and-iphone-sdk.html/http://nachbaur.com/blog/back-to-basics-using-kvo)未涵蓋此類情況。他們只是觀察者應用到一個類來觀察它的一個屬性,而不是在一個類內的(自定義)對象的屬性,我認爲這對我來說更有用。
預先感謝您
[編輯] 對於那些誰就會錯過接受的答案我的評論:
更改視圖的中心顯然將不會觸發幀屬性的觀察員。你必須改變框架本身。
據我從你的問題理解是否tableindicator是烏拉圭回合的ViewController,然後去NSNotification,而不是志願 –
我知道如何使用NSNotification。我正在嘗試使用KVO,因此我可以更好地理解這種技術。 – BBog
我知道這是一個很久以前回答的非常古老的問題,但我想爲可能找到它的其他人添加評論。你應該認識到UIKit中一個視圖的「框架」是它是從「邊界」和「中心」中找到的值合成的。如果您想在視圖的位置或大小上執行KVO,通常最好觀察邊界或中心,而不是幀屬性。如果您直接更改框架屬性,它只會觸發KVO通知。 –