我有一个正在做一些计算的视图,我想在这段时间内隐藏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];
    }

10-07 19:05