2012-08-10 59 views
0

我有一個導航控制器,我已經推入了兩個視圖。我想在導航欄中顯示一個按鈕,該按鈕應顯示在所有視圖中。但是,當我想這樣...僅在當前視圖中顯示的導航欄中添加按鈕。如何設置所有視圖?

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setBackgroundImage:[UIImage imageNamed:@"logo-57.png"] forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(backButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 
[button setFrame:CGRectMake(-2, 0, 57, 57)]; 

UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
root_obj_ab.navigationItem.rightBarButtonItem = btnItem; 

它是在我寫代碼的地方視圖中添加。如何設置所有視圖的按鈕?

TIA

回答

0

如何創建一個具有此按鈕的自定義視圖控制器,然後將所有視圖控制器作爲該自定義視圖控制器的子類?

+0

這種方式看起來不錯。如果我要實現,並且我沒有很多自定義的按鈕,我會這樣做。 – analysiser 2012-08-10 07:45:29

+0

子類化導航控制器的工作方式類似嗎?或將所有視圖控制器仍然擁有不同的導航欄? – 2013-02-27 10:06:24

+0

導航控制器的工作方式是當前視圖控制器配置其導航項,以使其屬性在導航控制器導航欄中可見。因此,如果您不使用每個視圖控制器中的navigationItem屬性,則導航控制器本身的子類可能會正常。在執行此操作之前,請檢查導航項類別參考:http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationItem_Class/Reference/UINavigationItem.html – 2013-02-27 11:40:55

1

如果不想以編程方式添加相同的按鈕,所有的導航項目的,你應該寫導航欄上的一個類別,你需要添加按鈕uibarbuttonitem.The同樣的故事像改變的IOS 5.0之前的導航欄的背景顏色。

+0

我不清楚該怎麼做,你可否解釋一下。 – Feroz 2012-08-10 07:08:24

+1

http://www.merowing.info/2012/02/custom-navigation-bar-ios/ – 2012-08-10 07:15:44

+0

它是關於改變背景圖像,但你可以暗示它添加按鈕 – 2012-08-10 07:16:49

0

您必須將此代碼放在所有視圖控制器中才能在整個應用程序中工作。

+0

如果我喜歡你說的話。我是否需要爲每個班的按鈕編寫操作? – Feroz 2012-08-10 07:09:38

0

我覺得這個問題更關注設計模式。 RicardPérezdel Campo以子類方式解決了這個問題。我認爲這將工作得很好。

但是,也許你想要一些類似的按鈕以相同的方式工作,但這些按鈕仍然有一些差異。然後,您可以應用創建模式來執行此操作,例如Factory Method Pattern或使用Builder Pattern

希望這會幫助你的設計。

爲了演示樣品,也許你可以做這樣的:

// Code in a CustomButtonFactory class 
    + (UIBarButtonItem *)getCustomBackButtonItemForTarget:(id)target selector:(SEL)sel 
    { 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [button setBackgroundImage:[UIImage imageNamed:@"logo-57.png"] forState:UIControlStateNormal]; 
     [button addTarget:target action:sel forControlEvents:UIControlEventTouchUpInside]; 
     [button setFrame:CGRectMake(-2, 0, 57, 57)]; 

     UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

     return btnItem; 
    } 

如果你不想每次和敢肯定,每個這樣的按鈕會以同樣的方式運作,以實現選擇,你可以在你的工廠類中實現該方法。

相關問題