2015-07-03 3 views
0

Как определить, изменились ли x, y, ширина или высота представления вида?Xcode, как изменить свойства вида?

Я хочу реализовать это, как только свойства вида будут изменены, позиции другого представления будут реорганизованы.

Например, у меня есть веб-представление с динамической высотой. Каждый раз, когда webViewDidFinishLoad меняет высоту webView, позиция другого представления будет изменена в соответствии с webview.frame.

Я думал, что я изменяю всю позицию вида внутри функции делегата webViewDidFinishLoad. Но у меня слишком много просмотров.

Я хочу знать, могу ли я осуществить это поведение, используя «Key-Value Соблюдая»

Если я могу, как это осуществить.

+0

Вы используете Swift или ObjC? – Wez

+0

Я использую Object C. – Albert

ответ

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"]; 


Ключевой путь Ключевой путь, по отношению к приемнику, свойства наблюдать. Это значение не должно быть nil.

изменение
Словарь, который описывает изменения, внесенные в значение свойства в ключевом ключе keyPath относительно объекта.

+0

@ "frame" может быть любым именем? или имя наблюдаемого объекта? – Albert

+0

Внутри второй функции, как я могу получить объект-наблюдатель и наблюдаемый объект? – Albert

0

Вы можете использовать Delegate или NSNotificationCenter, чтобы передать значение контроллеру, который держит другие виды.

Надеюсь, это поможет.

Смежные вопросы