为什么不总是调用ViewDidAppear和ViewWillAppear?

时间:2014-03-09 16:12:59

标签: ios view viewdidload viewwillappear viewdidappear

我有一个方法可以根据UITextView的内容设置UIScrollView和UITextView的高度。我意识到,当从viewWillAppear调用方法时,textview和scrollview都会正确调整大小,而不是从viewDidLoad调用(textview没有从viewDidLoad中正确调整大小,而是滚动视图)。

//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。我第一次执行segue时它会起作用,但如果我再次按下该选项卡则不会,因为未调用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];

}

1 个答案:

答案 0 :(得分:0)

最好的方法是使用tab bar委托方法而不是viewWillAppear:

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

    if ([viewController isKindOfClass:someClass]){

         //do your stuff

    }
}