如何在UINavigationBar中添加按钮?

时间:2010-03-23 23:20:21

标签: ios iphone xcode interface-builder uinavigationbar

如何以编程方式向UINavigationBar添加按钮?

7 个答案:

答案 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:)];;

enter image description here

答案 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)
    }