仅在viewDidApper中调用但在viewDidLoad中不调用的方法,为什么?

时间:2014-03-20 16:41:25

标签: ios objective-c ios7 viewdidload viewdidappear

我创建了一个方法,根据值设置按钮的标题。

打开viewController时需要调用此方法,并且可能在控制器再次出现时刷新。

所以我创建了方法,并在viewDidLoad和viewDidApper中调用了该方法,但它似乎仅在我更改页面并返回视图控制器时才被调用。

为什么?

我的代码是

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self controlloRichieste];

......
}

-(void)viewDidAppear:(BOOL)animated{

[self controlloRichieste];
}


-(void)controlloRichieste{
//Numero richieste di contatto
NSString *numeroRichieste = @"1";

if([numeroRichieste isEqual:@"0"]){
    [_labelRequestNumber setTitle:@"Nessuna" forState:UIControlStateNormal];
} else {
    _labelRequestNumber.titleLabel.text = numeroRichieste;
    _labelRequestNumber.tintColor = [UIColor redColor];
}
//Fine Numero richieste di contatto
}

2 个答案:

答案 0 :(得分:0)

您也可以将该代码移至viewWillAppear,以便每次出现时都会调用该代码。

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];

  [self controlloRichieste];
}

我现在看到了问题,尝试相反的方式

-(void)controlloRichieste{
    //Numero richieste di contatto
    NSString *numeroRichieste = @"1";

    if([numeroRichieste isEqual:@"0"]){
        [_labelRequestNumber setTitle:@"Nessuna" forState:UIControlStateNormal];
    } else {
        _labelRequestNumber.tintColor = [UIColor redColor];
        [[_labelRequestNumber titleLabel]setText:numeroRichieste];
    }
    //Fine Numero richieste di contatto
}

更改设置按钮颜色,然后更改其titleLabel' s text


我为您创建了一个演示 PROJECT ,希望对您有所帮助!

答案 1 :(得分:0)

第一次打开视图时,会调用viewDidLoad并调用viewDidAppeare。

每次打开视图时,当您推送或显示其他视图控制器并返回到一个viewDidAppeare时,都会调用viewDidAppeare。 你应该致电:

[super viewDidAppear:animated];

只在加载视图时调用viewDidLoad,然后在取消分配视图时调用它,并且需要再次分配它。因此,当您推送或呈现其他视图控制器并返回到缅因州时,一个viewDidLoad不会被调用。