Xcode如何检测视图的属性发生了变化?

时间:2015-07-03 07:58:10

标签: ios objective-c xcode key-value-observing

如何检测视图的x,y,宽度或高度是否已更改?

我想实现一旦视图的属性发生变化,其他视图的位置就会重新组织。

例如,我有一个具有动态高度的webview。每次webViewDidFinishLoad我都会改变webView的高度,那么其他视图的位置将根据webview.frame进行更改。

我一直在想我改变了委托函数webViewDidFinishLoad中所有视图的位置。但我的观点太多了。

我想知道我是否可以使用"来实现此行为键值观察"

如果可以的话,如何实施它。

2 个答案:

答案 0 :(得分:1)

//added KVO for webview
[webview addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionOld context:NULL];  

//when observer changed would call:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if([keyPath isEqualToString:@"frame"]) {
        //do something
        NSLog(@"new:%@",[change objectForKey:NSKeyValueChangeNewKey]);
        NSLog(@"old:%@",[change objectForKey:NSKeyValueChangeOldKey]);
    }
}

//when you don't need kvo, remove observer
[webview removeObserver:self forKeyPath:@"frame"];
  

的keyPath
  要观察的属性的关键路径,相对于接收器。该值不得为零。

     

变化
  一个字典,描述对键路径keyPath的属性值相对于对象所做的更改。

答案 1 :(得分:0)

您可以使用DelegateNSNotificationCenter将值推送到持有其他视图的控制器。

希望这可以提供帮助。