这就是我想要实现的目标: 注意:还有控制器的标题。
一些附加信息:-
- 这个导航栏将出现在大约 10 个视图控制器上。
- 它不是导航控制器的一部分,因为不是必需的。
- 左边的按钮是静态的(总是在导航栏上)。
- 右键不是静态的,在不同的视图控制器上要么不存在,要么不同。
- 左键充当滑动菜单(即菜单从左下方滑入)
- 我在设置中使用故事板
问题 实现这一目标的正确方法是什么?
现有代码 我试图实现这一点,但我只能得到一个或另一个按钮,没有标题工作。为了实现背景,我使用了外观 API,如下所示:
完成启动...
// 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 代码分配了一个新的 UINavigationItem,因此我无法控制标题并向其添加按钮。我怎样才能完成这个?这是最好的方法,还是有其他方法我看不到任何关于如何解决这个问题的深入教程。