2011-06-18 30 views
3

爲了定製我的UINavigationControllernavigationBar的方面,我被告知要將UINavigationBar類繼承下來。如何將我的CustomNavigationBar分配給UINavigationController?

我需要改變酒吧​​的高度,放置一個圖像,而不是標題..等我不能只使用UINavigationBar屬性。

現在,我的問題是,如何分配到UINavigationController,我的CustomNavigationBar實例?我不能使用UINavigationController.navigationBar,因爲它是隻讀的。

唯一的辦法似乎是加載一個xib,但子類UINavigationController不是蘋果公司推薦的,所以我有點困惑。

+0

嘗試回答這些問題:http://stackoverflow.com/questions/704558/custom-uinavigationbar-background/2720196#2720196 http://stackoverflow.com/q/380507/760275 –

回答

3

正是取決於你如何定製想要的導航欄,下面可以幫助你:

1)在酒吧的圖像,替換的標題文字。 (個體是一個UIViewController)

UIImageView *titleImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]]; 
self.navigationItem.titleView = titleImg; 
[titleImg release]; 

2)中的全定製導航欄

子視圖的UIView(CORRECTION:UINavigationController的)配有一個筆尖,使用(例如,iPhone縱向)一個imageview的作爲背景的(可以有一個漸變),然後在左側和右側定製按鈕,都與您的相關響應者功能相關聯。只要你將這個導航欄視圖作爲子視圖添加到每個視圖控制器等,每當新的視圖控制器被推入堆棧時,你就會覆蓋Apple的標準導航欄。 (記得設置他們隱藏在應用程序委託)


編輯:

NavigationBar.h

@interface NavigationBar: UIViewController 
{ 
    IBOutlet UIImageView* navigationBarImgView; // remember to set these 4 IBOutlets as properties with (nonatomic, retain) and synthesize them. 

    IBOutlet UILabel* controllerHeader; 

    IBOutlet UIButton* rightButton; 
    IBOutlet UIButton* leftButton; 

    eController controller; 

    int screenWidth; 
} 

NavigationBar.m

-(id)initNavigationBar: (NSString*)name bundle:(NSBundle*)bundle: (eController)controllerName: (int)inScreenWidth 
{ 
    [super initWithNibName:name bundle:bundle]; 

    controller = controllerName; 
    screenWidth = isScreenWidth; 

    return self; 
} 

你可以看到我的init這裏只傳遞一些東西 - 一個在我的應用程序委託中定義的枚舉,其中包含所有可能的v的名稱控制器。我們在我的自定義導航欄類​​中解釋此枚舉並在所有可能的控制器之間切換,然後設置它們的按鈕和標題以及使用該信息啓動的操作。屏幕寬度很重要 - 儘管如果您在IB中創建欄,則可能不需要此設置,但請設置它的大小以填充爲這兩個方向分配的空間。

回執:)

+0

@Krypton好酷,所以我可以使用navigationItem設置圖像作爲標題。我只需要改變酒吧​​的高度。你知道我是否也可以通過屬性來做到這一點? – aneuryzm

+0

Apple報價:「您絕不能直接直接更改UIView級別的屬性,如框架,邊界,alpha或隱藏屬性。」資料來源:http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationBar_Class/Reference/UINavigationBar.html – Luke

+0

@Krypton請問您的最後一條評論是否意味着我需要繼承UINavigationBar,如果我想改變它的身高? – aneuryzm