Почему не всегда вызываются ViewDidApper и ViewWillApper?

У меня есть метод, который устанавливает высоту UIScrollView и UITextView на основе содержимого UITextView. Я понял, что размер как textview, так и scrollview изменяется правильно, когда метод вызывается из viewWillAppear, но не из viewDidLoad (размер textview не изменяется правильно из viewDidLoad, но есть scrollview).

//In View1
-(void) setHeight
{
    NSLog(@"Set height");
    CGRect frame = descriptionTextView.frame;
    frame.size.height = descriptionTextView.contentSize.height;
    descriptionTextView.frame = frame;

    if([[UIScreen mainScreen] bounds].size.height == 568) //iPhone 4inch
    {
        totalHeight = 380+frame.size.height;
        [self.mainScrollView setContentSize:CGSizeMake(320,totalHeight)];
    }
    else{
        totalHeight = 250+frame.size.height;
        [self.mainScrollView setContentSize:CGSizeMake(320,totalHeight)];
    }    
}

Проблема в том, что я создал настраиваемое меню панели вкладок с UIView, которое является заполнителем. В первый раз, когда я выполняю переход, он работает, но не если я вернусь и снова нажму вкладку, поскольку viewWillAppear и viewDidAppear не вызываются. почему не называются? Как заставить их позвонить?

//In CustomTabBarController
-(void) selectTab{
    self.isLoaded = YES;
    self.activity_indicator.hidden = YES;

    if ([self.selectedButton isEqualToString: @"view1"])
        [self performSegueWithIdentifier:@"sg_view1" sender:self];
    else if ([self.selectedButton isEqualToString:@"view2" ])
        [self performSegueWithIdentifier:@"sg_view2" sender:self];
    else if ([self.selectedButton isEqualToString:@"view3" ])
        [self performSegueWithIdentifier:@"sg_view3" sender:self];

}

person nabrugir    schedule 09.03.2014    source источник


Ответы (1)


Лучшим подходом было бы использование метода делегата панели вкладок вместо viewWillAppear:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    if ([viewController isKindOfClass:someClass]){

         //do your stuff

    }
}
person Mika    schedule 09.03.2014