如何以编程方式向UINavigationBar添加按钮?
答案 0 :(得分:294)
在rightbutton
上设置NavigationBar
的示例代码。
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;
答案 1 :(得分:20)
上面的答案很好,但我想用更多的提示将它们充实:
如果你想修改后退按钮的标题(箭头看起来在导航栏的左边)你必须在PREVIOUS视图控制器中进行,而不是它将显示的那个。这就像是在说“嘿,如果你曾经在另一个上面推动另一个视图控制器,请回拨”后退“(或其他)而不是默认。”
如果要在特殊状态下隐藏后退按钮,例如在显示UIPickerView时,请使用self.navigationItem.hidesBackButton = YES;
并记住在离开特殊状态时将其设置回来。
如果您想要显示其中一个特殊符号按钮,请使用initWithBarButtonSystemItem:target:action
形式,其值为UIBarButtonSystemItemAdd
请记住,该符号的含义取决于您,但请注意人机界面指南。使用UIBarButtonSystemItemAdd表示删除项目可能会使您的申请被拒绝。
答案 2 :(得分:11)
向导航栏添加自定义按钮(使用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];
答案 3 :(得分:7)
以下示例将在右侧导航栏上显示标题为“联系人”的按钮。它的动作从viewcontroller调用一个名为“contact”的方法。没有这一行,右边的按钮就不可见了。
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;
答案 4 :(得分:3)
在Swift 2中,你会这样做:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
答案 5 :(得分:2)
为什么不使用以下内容: (来自Draw custom Back button on iPhone Navigation Bar)
// 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];
答案 6 :(得分:0)
swift 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)
}