2011-12-01 101 views
0

這是我的問題。 我有一個應用程序使用UITabBar,並在一些視圖上的一些NavigationControllers,和酒吧都是黑色不透明。由於我有超過6個選項卡,它打開UIMoreListController,到目前爲止,我可以更改導航欄的顏色。 我的問題是當用戶點擊編輯按鈕來組織moreListController上的工具欄。標題欄(我不知道它是一個工具欄還是導航欄)是藍色的。我想將其改爲黑色不透明。任何人都知道如何去做? 此致敬禮! Marcelo Marsson。UIMoreListController編輯modalViewController工具欄(或導航欄)顏色變化

回答

0

我做這在以前的項目(但是,我必須強調應用程序從未發佈)通過實施UITabBarControllerDelegate協議,該方法具體爲:

- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers 
{ 
    UIView *editView = [[[self.tabBarController view] subviews] objectAtIndex:1]; 
    UINavigationBar *modalNavBar = [[editView subviews] objectAtIndex:0]; 
    [modalNavBar setBarStyle:UIBarStyleBlack]; 
} 

當然,這是極其容易因爲我假設這些索引的子視圖數組中的項目是我所期望的。

如果您要嘗試這種方法,我會謹慎行事,並在繼續前進行儘可能多的檢查。在訪問特定索引之前檢查數組的界限 - 檢查這些索引中的對象是否響應您要發送給它們的方法,等等。

同樣,我不認爲我可以推薦這種方法用於運輸應用程序,但我不知道有任何其他方式在iOS 5之前通過它的UI自定義API來執行此操作。

+0

它的工作原理!因爲做一些檢查,我稍微改變了一點。 – Marsson

+0

請注意!我無愧於自己的一切責任! ;) – Jasarien

+0

大聲笑...我做了一些變化和檢查當然...張貼... – Marsson

0

第一個答案完美的作品,但我想要一些檢查... 這樣,最糟糕的事情可能發生(除了蘋果不批准該應用程序)是該欄不會改變顏色。 謝謝Jasarien的指導!

- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers 
{ 
    //Prepara a variavel que vai armazenar a view; 
    UIView* edtView=nil; 


    for (int i=0; i<[[[self.tabBarController view] subviews]count]; i++) { 
     //checa se a subview é da classe esperada... 
     if ([NSStringFromClass([[[[self.tabBarController view] subviews] objectAtIndex:i]class]) isEqualToString:@"UITabBarCustomizeView"]) 
     { 
      //Beleza... quebra o laço... 
      NSLog(@"Achei!! sou eu do Indice %d",i); 
      edtView=[[[self.tabBarController view] subviews] objectAtIndex:i]; 
      break; 
     } 
    } 
    //Se nao achar a variavel, sabe-se lá deus por que, sai do método. 
    if (edtView==nil) { 
     return; 
    } 

    //Pega a NavigationBar 
    UINavigationBar *modalNavBar = nil; 

    for (int i=0; i<[[edtView subviews]count]; i++) { 
     //checa se a subview é da classe esperada... 
     if ([[[edtView subviews]objectAtIndex:i]isKindOfClass:[UINavigationBar class]]) 
     { 
      //Beleza... quebra o laço... 
      NSLog(@"Achei!! sou eu do Indice %d",i); 
      modalNavBar=[[edtView subviews]objectAtIndex:i]; 
      break; 
     } 

    } 
    //checa se a navBar existe 
    if (modalNavBar==nil) { 
     return; 
    } 
//muda a cor da navBar!!! 
[modalNavBar setBarStyle:UIBarStyleBlack]; 
} 
0

有改變所有的導航欄樣式,而不是單獨改變每一個或設置代表們使用TabBar或其他任何一個更簡單的方法:

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack]; 

只需設置該代碼的一個你的初始意見。有了這個,更多的導航控制器和配置導航控制器(在點擊更多導航控制器中的「編輯」後出現)可以獲得不同的風格。像這樣,您可以將其顏色更改爲不同的顏色或更改背景圖像。

希望這會有所幫助。