如何添加一个button到UINavigationBar?

如何以编程方式将button添加到UINavigationBar?

示例代码来设置NavigationBar rightbutton上的rightbutton

 UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:nil action:nil]; UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"]; item.rightBarButtonItem = rightButton; item.hidesBackButton = YES; [bar pushNavigationItem:item animated:NO]; 

但通常你会有一个NavigationController ,让你写:

 UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:nil action:nil]; self.navigationItem.rightBarButtonItem = rightButton; 

上面的答案是好的,但是我想用更多的技巧来补充它们:

如果你想修改后退button的标题(箭头-Y在导航栏的左侧看),你必须在前一个视图控制器中进行,而不是它将显示的那个控制器。 这就像是说:“嘿,如果你把另一个视图控制器放在这个视图控制器的顶部,就把后面的button叫做”后退“(或其他),而不是默认的。

如果要在特殊状态期间隐藏后退button(例如显示UIPickerView时),请使用self.navigationItem.hidesBackButton = YES; 并且记得在离开特殊状态的时候把它放回去。

如果要显示其中一个特殊符号button,请使用表单initWithBarButtonSystemItem:target:action ,其值为UIBarButtonSystemItemAdd

请记住,该符号的含义取决于您,但要小心人机界面指南。 使用UIBarButtonSystemItemAdd来表示删除一个项目可能会让你的应用程序被拒绝。

将自定义button添加到导航栏(buttonItem的图像和指定操作方法(void)openView {}和)。

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(0, 0, 32, 32); [button setImage:[UIImage imageNamed:@"settings_b.png"] forState:UIControlStateNormal]; [button addTarget:self action:@selector(openView) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *barButton=[[UIBarButtonItem alloc] init]; [barButton setCustomView:button]; self.navigationItem.rightBarButtonItem=barButton; [button release]; [barButton release]; 

下面的例子会在右边的导航栏上显示一个标题为“联系人”的button。 它的操作从视图控制器调用名为“contact”的方法。 没有这一行右边的button是不可见的。

  self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact" style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];; 

在这里输入图像说明

为什么不使用以下内容:(从iPhone导航栏上的绘制自定义后退button )

 // Add left UINavigationItem *previousItem = [[UINavigationItem alloc] initWithTitle:@"Back title"]; UINavigationItem *currentItem = [[UINavigationItem alloc] initWithTitle:@"Main Title"]; [self.navigationController.navigationBar setItems:[NSArray arrayWithObjects:previousItem, currentItem, nil] animated:YES]; // set the delegate to self [self.navigationController.navigationBar setDelegate:self]; 

在Swift 2中,你会这样做:

 let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil) self.navigationItem.rightBarButtonItem = rightButton 

迅速3

  let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(cancelPressed(_:))) cancelBarButton.setTitleTextAttributes( [NSFontAttributeName : UIFont.cancelBarButtonFont(), NSForegroundColorAttributeName : UIColor.white], for: .normal) self.navigationItem.leftBarButtonItem = cancelBarButton func cancelPressed(_ sender: UIBarButtonItem ) { self.dismiss(animated: true, completion: nil) }