我有一个正在做一些计算的视图,我想在这段时间内隐藏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的调用不起作用。
我还尝试了将导航项.backButton设置为nil的示例,使用自定义的空按钮,调用setNeedsDisplay或setHidesBackButton:animated :,但均未成功。
有任何想法吗?
最佳答案
发现了这一点:设置一个空的leftBarButton隐藏了backButton。也许有人有更清洁的解决方案?
if(busy)
{
[self.navigationItem setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithCustomView:[[UIView new] autorelease]] autorelease] animated:NO];
}
else
{
[self.navigationItem setLeftBarButtonItem:nil animated:NO];
}