如何在没有IB的情况下在右侧的UINavigationbar中添加2个button?

如何在没有XIB的情况下将2个button添加到UINavigationBar
2个button应该alignment在UINavigationBar的右侧。

我知道如何添加一个button,但是两个怎么样?

有了iOS 5+,它就像下面这样简单:

 UIBarButtonItem *btnShare = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(share)]; UIBarButtonItem *btnRefresh = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh)]; [self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:btnShare, btnRefresh, nil]]; 

我发布了代码 (见下文)在navigationBar的右侧添加两个button。 您可以设置barStyle = -1而不是UIToolbar的子类。

 UIToolbar *tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 103.0f, 44.01f)]; // 44.01 shifts it up 1px for some reason tools.clearsContextBeforeDrawing = NO; tools.clipsToBounds = NO; tools.tintColor = [UIColor colorWithWhite:0.305f alpha:0.0f]; // closest I could get by eye to black, translucent style. // anyone know how to get it perfect? tools.barStyle = -1; // clear background NSMutableArray *buttons = [[NSMutableArray alloc] initWithCapacity:3]; // Create a standard refresh button. UIBarButtonItem *bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)]; [buttons addObject:bi]; [bi release]; // Create a spacer. bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; bi.width = 12.0f; [buttons addObject:bi]; [bi release]; // Add profile button. bi = [[UIBarButtonItem alloc] initWithTitle:@"Profile" style:UIBarButtonItemStylePlain target:self action:@selector(goToProfile)]; bi.style = UIBarButtonItemStyleBordered; [buttons addObject:bi]; [bi release]; // Add buttons to toolbar and toolbar to nav bar. [tools setItems:buttons animated:NO]; [buttons release]; UIBarButtonItem *twoButtons = [[UIBarButtonItem alloc] initWithCustomView:tools]; [tools release]; self.navigationItem.rightBarButtonItem = twoButtons; [twoButtons release]; 

您可以将使用工具栏初始化的酒吧button用作自定义视图。

 UIToolbar* toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 103.0f, 44.01f)]; NSArray* buttons = [NSArray arrayWithObjects:self.editButtonItem, someOtherButton, nil]; [toolbar setItems:buttons animated:NO]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolbar]; 

会给这样的事情:

替代文字

注意:对于iOS 6或更高版本,此答案已过时

下面是我目前的项目的工作示例:

两个按钮进入UINavigationbar的RightBarButtonItem

 UIButton *homeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [homeBtn setImage:[UIImage imageNamed:@"home-icon"] forState:UIControlStateNormal]; //[homeBtn addTarget:self action:@selector(home) forControlEvents:UIControlEventTouchUpInside]; [homeBtn setFrame:CGRectMake(0, 0, 32, 32)]; UIButton *settingsBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [settingsBtn setImage:[UIImage imageNamed:@"settings-icon"] forState:UIControlStateNormal]; //[settingsBtn addTarget:self action:@selector(settings) forControlEvents:UIControlEventTouchUpInside]; [settingsBtn setFrame:CGRectMake(44, 0, 32, 32)]; UIView *rightBarButtonItems = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 76, 32)]; [rightBarButtonItems addSubview:homeBtn]; [rightBarButtonItems addSubview:settingsBtn]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightBarButtonItems]; 
 UINavigationBar *navBarView = [[UINavigationBar alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 42.0f)]; navBarView.tintColor= [UIColor colorWithRed:90.0/255.0f green:53.0/255.0f blue:45.0/255.0f alpha:1.0]; UIBarButtonItem *left=[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backView)]; UIBarButtonItem *right=[[UIBarButtonItem alloc]initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(SaveImage)]; UIBarButtonItem *Add=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(AddComment:)]; UINavigationItem *navigationItem = [[UINavigationItem alloc] init]; navigationItem.leftBarButtonItem = left; NSMutableArray *buttonArray=[[NSMutableArray alloc]initWithCapacity:2]; [buttonArray addObject:right]; [buttonArray addObject:Add]; navigationItem.rightBarButtonItems = buttonArray; [navBarView pushNavigationItem:navigationItem animated:NO]; [self.view addSubView:navBarView]; 

迅速:

 override func viewDidLoad() { super.viewDidLoad() // Additional bar button items let button1 = UIBarButtonItem(image: UIImage(named: "image1.png"), style: .Plain, target: self, action: "methodA") let button2 = UIBarButtonItem(image: UIImage(named: "image2.png"), style: .Plain, target: self, action: "methodB") let button3 = UIBarButtonItem(image: UIImage(named: "image3.png"), style: .Plain, target: self, action: "methodC") navigationItem.leftItemsSupplementBackButton = true navigationItem.setLeftBarButtonItem(button1, animated: true) navigationItem.setRightBarButtonItems([button2, button3], animated: true) 

button的方法:

 func methodA() { performSegueWithIdentifier("segA", sender: nil) } func methodB() { performSegueWithIdentifier("segB", sender: nil) } func methodC() { performSegueWithIdentifier("segC", sender: nil) } 

迅速

你可以像这样快速地

  var editImg : UIImage = UIImage(named: "plus")! var searchImg : UIImage = UIImage(named: "search")! var editBtn : UIBarButtonItem = UIBarButtonItem(image: editImg, style: UIBarButtonItemStyle.Plain, target: self, action: Selector("editBtnPressed:")) var searchBtn : UIBarButtonItem = UIBarButtonItem(image: searchImg, style: UIBarButtonItemStyle.Plain, target: self, action: Selector ("searchBtnPressed:")) var buttons : NSArray = [editBtn, searchBtn] self.navigationItem.rightBarButtonItems = buttons func editBtnPressed(sender: AnyObject){ } func searchBtnPressed(sender: AnyObject){ } 

您可以创build一个UIView并在该视图中添加两个button。 并添加该UIView作为正确的button:)

 UIView* rightItem = [UIView alloc] initWithFrame:frame]; //Create UIButton1 b1 //Create UIButton2 b2 [rightItem addSubview:b1]; [rightItem addSubview:b2]; self.navigationItem.rightBarButtonItem = rightItem; 

Prakash的响应也可以在界面构build器中使用。

UINavigationItem拖动一个UIView ,然后你可以把多个UIButton作为这个UIViewUIView并像这样创build一个层次结构:

导航栏与3个按钮层次结构

设置UIView的背景颜色清除并添加一些约束来垂直居中button并固定水平位置。 这是我得到的零行代码的结果:

结果在模拟器

在SWIFT中,您可以添加此代码以在右侧(或左侧)设置两个button:

 self.navigationItem.rightBarButtonItems = [UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Action, target: self, action: "barButtonItemClicked"), UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "barButtonItemClicked")] 

你不必添加两个button。 你只需要添加

 UIBarButtonSystemItemFlexibleSpace 

 UIBarButtonSystemItemFixedSpace 

和一个button,所以它会在右侧。

喜欢这个:

 UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 40)]; toolbar.barStyle = UIBarStyleBlackTranslucent; UIBarButtonItem *spaceButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem *infoButtonItem1 = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(empresaTextFieldDone)]; toolbar.items = [NSArray arrayWithObjects: spaceButton, infoButtonItem1, nil]; 
 UIView* buttonsView= [[UIView alloc] initWithFrame:CGRectMake(10, 6, 84, 32)]; buttonsView.backgroundColor=[UIColor clearColor]; btn_back = [UIButton buttonWithType:UIButtonTypeCustom]; [btn_back addTarget:self action:@selector(backButtonClick) forControlEvents:UIControlEventTouchUpInside]; btn_back.frame = CGRectMake(0, 0, 32, 32); btn_back.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"close.png"]]; btn_help = [UIButton buttonWithType:UIButtonTypeCustom]; [btn_help addTarget:self action:@selector(helpButtonClick) forControlEvents:UIControlEventTouchUpInside]; btn_help.frame = CGRectMake(42, 0, 32, 32); btn_help.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"info.png"]]; [buttonsView addSubview:btn_back]; [buttonsView addSubview:btn_help]; segmentItem = [[UIBarButtonItem alloc] initWithCustomView:buttonsView]; self.navigationItem.rightBarButtonItem = segmentItem; 

如果有人像我这样来到这里,寻找一个MonoTouch的答案,看看没有进一步的NavigationItem.RightBarButtonItems数组。

在SWIFT中:

(假设你有一个导航控制器)在根控制器使用这个代码:

剩下: ..

  let leftBtn = UIBarButtonItem(title: "Do It", style: UIBarButtonItemStyle.Plain, target: self, action: "doIt:") leftBtn.tag=100 self.navigationItem.leftBarButtonItem = leftBtn 

对:

  let rightView = UIView(frame: CGRectMake(0, 0, 100, 30)) rightView.backgroundColor = UIColor.redColor() let btn1 = UIButton(frame: CGRectMake(0,0,60, 20)) btn1.setTitle("R1", forState: UIControlState.Normal) btn1.tag=101 btn1.addTarget(self, action: "doIt:", forControlEvents: UIControlEvents.TouchUpInside) rightView.addSubview(btn1) let btn2 = UIButton(frame: CGRectMake(30,0,60, 20)) btn2.setTitle("R2", forState: UIControlState.Normal) btn2.tag=102 btn2.addTarget(self, action: "doIt:", forControlEvents: UIControlEvents.TouchUpInside) rightView.addSubview(btn2) let rightBtn = UIBarButtonItem(customView: rightView) self.navigationItem.rightBarButtonItem = rightBtn; 

..

哪里:

  func doIt(sender: AnyObject!){ let tag = sender.tag } 
  func makeCustomNavigationBar () { // Create the navigation bar let navigationBar = UINavigationBar(frame: CGRectMake(0, 20, self.view.frame.size.width, 44)) // Offset by 20 pixels vertically to take the status bar into account navigationBar.backgroundColor = UIColor.init(hexString: "E43037") navigationBar.delegate = self; navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) navigationBar.shadowImage = UIImage() navigationBar.translucent = true // Create a navigation item with a title let navigationItem = UINavigationItem() navigationBar.tintColor = UIColor.whiteColor() navigationItem.title = "Forgot Password" navigationBar.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()] // Create left and right button for navigation item let leftButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: self, action: nil) leftButton.action = "returnToLoginView" let backbuttonImageView = UIImageView(frame: CGRectMake(0, 0, 30, 30)) backbuttonImageView.image = UIImage(named: "nav-arrow-left") leftButton.image = backbuttonImageView.image navigationItem.leftBarButtonItem = leftButton let rightButton = UIBarButtonItem(title: "Right", style: UIBarButtonItemStyle.Plain, target: self, action: nil) rightButton.action = "navigateToDashBoardView" let rightButtonImageView = UIImageView(frame: CGRectMake(0, 0, 30, 30)) rightButtonImageView.image = UIImage(named: "nav-arrow-left") rightButton.image = backbuttonImageView.image navigationItem.rightBarButtonItem = rightButton // Assign the navigation item to the navigation bar navigationBar.items = [navigationItem] // Make the navigation bar a subview of the current view controller self.view.addSubview(navigationBar) }