2011-12-23 57 views
1

我有做一些運算的觀點,我想在這段時間隱藏後退按鈕。變化動態知名度在UINavigationBar的

我使用它來打開,有一個後退按鈕一個新的控制器和取消按鈕:

[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 
} 

問題:在fi首先運行它按預期工作,按鈕被隱藏,然後再次顯示。 單擊後退按鈕時,視圖會彈出。第二次運行時,按鈕從一開始就缺失。該方法updateButtons被稱爲兩次,記錄變量self.viewMode忙顯示正確的行爲(第1再0),所以很明顯調用hidesBackButton不工作。

我還嘗試使用設置navigationItem.backButton的例子,使用自定義空按鈕,調用setNeedsDisplay或setHidesBackButton:animated:,都沒有成功。

任何想法?

回答

0

發現這一點:設定一個空leftBarButton隱藏後退按鈕。也許有人有更清潔的解決方案?

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