我有一个视图正在进行一些计算,我想在此期间隐藏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:,都没有成功。
有什么想法吗?
答案 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];
}