這是什麼,我想實現的子類UINavigationBar的: 注:也有一個標題到控制器。如何正確使用也是外觀
一些額外的信息: -
- 該導航條將顯示在約10視圖控制器。
- 它不是導航控制器的一部分,以能夠不是必需的。
- 左邊的按鈕是靜態的(始終是導航欄上)。
- 右邊的按鈕是不是靜態的,要麼不存在,或者是 在不同的視圖控制器不同。
- 左邊的按鈕充當滑動菜單(在下方即菜單幻燈片左起)
- 我在安裝使用故事板
問題 什麼是實現這一目標的正確方法是什麼?
現有代碼 我試圖實現這一點,但我只能得到一個或另一個按鈕,沒有標題的工作。爲了實現我用外觀API如下背景:
didFinishLaunching ...
// Custom Navigation Bar appearance setup
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5],UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
UITextAttributeTextShadowOffset,nil]];
// Used to deal with the rotation of the nav bar when implemented outside of Navigation Controller
[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleHeight];
[[UINavigationBar appearance] setContentMode:UIViewContentModeScaleAspectFit];
// Set the background image
UIImage *imageBg = [[UIImage imageNamed: @"mainNavBar"] resizableImageWithCapInsets:UIEdgeInsetsMake(0,5,0,5)];
[[UINavigationBar appearance] setBackgroundImage:imageBg forBarMetrics:UIBarMetricsDefault];
// Used to push the title down slightly when in Landscape and NavBar outside of Navigation Controller
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:2 forBarMetrics:UIBarMetricsLandscapePhone];
我那麼子類UINavigationBar的左按鈕創建下列要求: 子類UINavigationBar的的:awakeFromNib
UINavigationItem* ni = [[UINavigationItem alloc] init];
UIButton *leftButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 38.0f, 29.0f)];
[leftButton setImage:[UIImage imageNamed:@"menuBarItem"] forState:UIControlStateNormal];
[leftButton addTarget:nil action:@selector(menuItemPressed:) forControlEvents:UIControlEventTouchUpInside];
[leftButton setContentMode:UIViewContentModeScaleAspectFit];
[leftButton setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin];
UIBarButtonItem *b =[[UIBarButtonItem alloc] initWithCustomView:leftButton];
ni.leftBarButtonItem = b;
self.items = @[ni];
然後在故事板內添加一個NavigationBar到有問題的VC並鏈接到正確的子類。我還爲該控制器的故事板中的導航欄添加了一個附加按鈕項並鏈接到插座。然後在VC中我嘗試更新的標題,右按鍵與下方:保存子類的導航欄
視圖控制器:viewDidLoad中
// Set VC Title for NavBar
self.title = NSLocalizedString(@"NavBarHomeTitle", @"Navigation Bar - Home page title");
// Setup the right navigation bar item
UIImage *addImage = [UIImage imageNamed:@"addGameButton"];
UIButton *addButton = [UIButton buttonWithType:UIButtonTypeCustom];
[addButton setFrame:CGRectMake(0, 0, addImage.size.width, addImage.size.height)];
[addButton setBackgroundImage:addImage forState:UIControlStateNormal];
[addButton addTarget:self action:@selector(addGameButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[self.rightBarButtonItem setCustomView:addButton];
結果是一個導航欄,只有左按鈕。現在,我相信這是因爲awakeFromNib碼以上的alloc初始化一個新的UINavigationItem因此我無法控制的標題和一個按鈕添加到它。我怎樣才能完成這個?這是最好的方法,還是有其他人我不能看到關於如何處理這個問題的深入教程。
謝謝,你能否提供一些關於如何完成這個請求的信息?我瞭解導航控制器的子類,但我不確定如何設置項目以及'..可以指定任何正確的條形按鈕項目(S)它需要'...每個VC? – StuartM 2013-05-08 22:32:14
您可以提供的其他任何信息嗎? – StuartM 2013-05-12 15:06:54
我認爲這條路線的問題是我有大約10個視圖控制器需要在他們自己的導航控制器中?或者你的意思是每次都有一個導航控制器並推送一個新的根視圖控制器? – StuartM 2013-05-12 15:59:24