2012-01-25 20 views
1

我確實有這方面的代碼,但由於它在很多文件中,所以我只會將其縮小並在必要時發佈。我相信我可能只是缺少一些方法調用或線程的事情...我有一個導航控制器,其視圖爲視圖,並帶有三個按鈕的工具欄。爲什麼UINavigationController的toolbarItems會在其餘視圖後4-5秒刷新?

  1. 觸摸三個按鈕中的一個導致要調用方法,該方法改變了表視圖的數據源,重新加載表,並且還工具欄上的改變按鈕的標題(以及可能的數量)的按鈕(#能爲0〜3)。

  2. 還有一個rightBarButtonItem,它推動一個模式的vc,在解散時,它改變dataSource並重新載入表格和按鈕。

問題:觸摸按鈕(#1)會立即產生效果:按鈕將重新繪製新標題並重新載入tableView的數據。但是,當模態vc被解散(表的setter屬性應該導致數據在vc的viewWillAppear之前重新加載),除了按鈕,一切都很好!工具欄上顯示正確數量的UIBarButtonItems,但它們的標題爲空。我在設置toolbarItems屬性的方法中使用了NSLog,並且在日誌顯示「UIBBI數組集合」後,出現帶有[空白]標題的按鈕,4-5秒後出現標題(在方法結束設置他們已經返回)。

我需要在不同的線程中做些什麼嗎?推這個tvc沒有問題,並且#1中描述的方法也不會產生相同的空白標題效果...所以,我很難過。對於LENGTHY的解釋抱歉...試圖完成。但任何幫助將非常感激!

代碼當self.resultsArray更新(從這個觀點被稱爲,前面的其中一個推動它,或者在模式

- (void)updateBestGuessesButtons 
{ 
if (self.resultsArray.count == 0 || self.resultsArray.count == 1 || !self.bestGuesses)  { 
    [self.navigationController setToolbarHidden:YES animated:YES]; 
    return; 
} 

[self.navigationController setToolbarHidden:NO animated:YES]; 

NSMutableArray *toolbarItems = [[NSMutableArray alloc] initWithObjects:[[UIBarButtonItem alloc] 
                     initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                     target:nil 
                     action:nil], nil]; 
for (NSString *guess in self.bestGuesses) { 
    UIBarButtonItem *button = [[UIBarButtonItem alloc] 
           initWithTitle:guess 
           style:UIBarButtonItemStyleBordered 
           target:self 
           action:@selector(removeWordsWithLetter:)]; 
    [toolbarItems addObject:button]; 
} 
[toolbarItems addObject:[[UIBarButtonItem alloc] 
         initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
         target:nil 
         action:nil]]; 

[self setToolbarItems:toolbarItems animated:YES]; 

}

+0

請發送您設置/創建按鈕的代碼。 –

+0

@PeterSarnowski完成 – 404compilernotfound

回答

0

它看起來像你必須爲所有狀態設置UIButton的標題,

[myButton setTitle:@"Foo" forState:UIControlStateNormal]; 
[myButton setTitle:@"Foo" forState:UIControlStateHighlighted]; 
[myButton setTitle:@"Foo" forState:UIControlStateSelected]; 
// .. and so on 
+0

感謝您的快速響應!但是,這些實際上是UIBarButtonItem按鈕,而不是UIButton。另外,每次他們「更新」時我都會創建它們。也就是說,我的「update」方法實際上創建了一個新的UIBarButtonItems數組,這個UIBarButtonItems已經使用alloc-initWith ... title:創建,然後添加到數組中,並將toolbarItems屬性設置爲該新數組。我從不「改變」現有按鈕的標題。任何其他想法?非常感謝! – 404compilernotfound

+0

更新:我將[self setToolbarItems:animated:]更改爲self.toolbarItems。當我使用此代碼從模態vc返回時,工具欄應該是黑框,然後延遲4〜5秒後,會顯示完整標題的UIBBI。難住了。 – 404compilernotfound

+1

這可能是動畫。模態視圖消失以顯示視圖後的事件序列可能是1)視圖被渲染 - 由於某種原因,當時按鈕不在視圖層次結構中2)按鈕被添加到視圖層次結構中3)視圖是當步驟1開始的某些動畫完成時再次渲染。你可以仔細檢查你的動畫嗎? –

0

好的 - 我對這個問題的解決方法是將按鈕創建移動到viewDid加載事件。

相關問題