在UINavigationBar中动态更改backButton的可见性

时间:2011-12-23 18:12:19

标签: ios navigationcontroller

我有一个视图正在进行一些计算,我想在此期间隐藏backButton。

我用它来打开一个带有后退按钮和取消按钮的新控制器:

[self.navigationController pushViewController:calcController animated:YES];

这是我开始计算的方法,全部在主线程中:

- (void)startSth {
    self.viewMode = modeRunning;
    [self updateButtons];
    [self performSelector:@selector(doSth) withObject:nil afterDelay:0.1];
}

- (void)doSth {
     ...
     self.viewMode = modeFinished;
     [self updateButtons];
}

这是方法,它应该切换按钮的可见性:

- (void)updateButtons {
    BOOL busy = (self.viewMode==modeRunning);
    self.navigationItem.hidesBackButton = busy; //back button
    self.navigationItem.rightBarButtonItem.enabled = !busy; //cancel button
}

问题:在第一次运行时,它按预期工作,按钮被隐藏,然后再次显示。 单击后退按钮时,将弹出视图。在第二次运行时,按钮从一开始就丢失了。方法updateButtons被调用两次,记录变量self.viewMode和busy显示正确的行为(首先是1然后是0),所以显然对hidesBackButton的调用不起作用。

我还尝试将settingsItem.backButton设置为nil的示例,使用自定义空按钮,调用setNeedsDisplay或setHidesBackButton:animated:,都没有成功。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

发现这个:设置一个空的leftBarButton会隐藏backButton。也许有人有一个更清洁的解决方案?

if(busy)
    {
        [self.navigationItem setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithCustomView:[[UIView new] autorelease]] autorelease] animated:NO];
    }
    else
    {
        [self.navigationItem setLeftBarButtonItem:nil animated:NO];
    }