У меня есть пользовательская навигация контейнера. У меня есть диспетчер просмотра дневника и контроллер подробного просмотра дневника. Когда пользователь нажимает на изображение в дневнике, он переходит к подробностям дневника, используя метод cycleFromViewController:toViewController
, как описано в документах Apple о контроллерах контейнера.observValueForKeyPath вызвано несколько раз
Когда загружается подробный просмотр, я хочу, чтобы контроллер представления контейнера удалял одно из его подзонов и добавлял еще один. Я использую KVC для этого. Это мой первый опыт использования KVC. addObserver
метод находится в viewWillAppear
в дневнике подробно vc.
Проблема: загружена подробная деталь VC, observeValueForKeypath
вызывается один раз в первый раз, дважды второй раз и т. Д. Кроме того, в observeValueForKeypath
я добавляю subview - UIButton - и когда он нажимается, cycleFromViewController:toViewController
вызывается снова, и предыдущее subview добавляется обратно. Он работает в первую очередь, но в последующих, исходное подвью не добавляется обратно, UIButton просто придерживается.
Дневник Detail.m
-(void)viewWillAppear:(BOOL)animated{
[self addObserver:self.parentViewController forKeyPath:@"didLoadNumber" options:0 context:nil];
[self setValue:[NSNumber numberWithInt:0] forKey:@"didLoadNumber"];}
Главная Контейнер VC (наблюдатель/родитель VC)
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"KVO called");
[self.usernameLabel removeFromSuperview];
self.backButton = [[UIButton alloc]initWithFrame:CGRectMake(12, 28, 28, 28)];
self.backButton.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.backButton];
[self.backButton addTarget:self action:@selector(removeButtonAndAddLogo)
forControlEvents:UIControlEventTouchUpInside];
}
-(void)removeButtonAndAddLogo{
NSLog(@"got to remove button");
[self.backButton removeFromSuperview];
self.usernameLabel = [[UILabel alloc]initWithFrame:CGRectMake(12, 28, 28, 28)];
self.usernameLabel.text = @"username";
self.usernameLabel.textColor = [UIColor blackColor];
[self.view addSubview:self.usernameLabel];
[self cycleFromViewController:self.diaryViewController.diaryDetailVC toViewController:self.diaryViewController];
}