ios 如何在没有IB的情况下向右侧的UINavigationbar添加2个按钮?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1803609/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to add 2 buttons into the UINavigationbar on the right side without IB?
提问by Alexander
How can I add 2 buttons into the UINavigationBar
without XIB?
The 2 buttons should be aligned on the right side of the UINavigationBar
.
如何在UINavigationBar
没有 XIB的情况下添加 2 个按钮?
2 个按钮应在UINavigationBar
.
I know how I can add one button, but how about two?
我知道如何添加一个按钮,但如何添加两个按钮?
回答by domsom
With iOS 5+ it's as easy as:
使用 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]];
回答by ma11hew28
I posted code(see below) to add two buttons to the right of the navigationBar. You can set barStyle = -1
instead of subclassing UIToolbar
.
我发布了代码(见下文)以在导航栏的右侧添加两个按钮。您可以设置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];
回答by Nathan
You can use a bar button initialized with a toolbaras a custom view.
您可以将使用工具栏初始化的栏按钮用作自定义视图。
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];
Would give something like this:
会给出这样的东西:
Note: This answer is obsolete for iOS 6 or later
注意:此答案对于 iOS 6 或更高版本已过时
回答by Adnan
Here is the working example from my current project:
这是我当前项目的工作示例:
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];
回答by Gurpreet Singh
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];
回答by LondonGuy
Swift:
迅速:
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)
Methods for buttons:
按钮的方法:
func methodA() {
performSegueWithIdentifier("segA", sender: nil)
}
func methodB() {
performSegueWithIdentifier("segB", sender: nil)
}
func methodC() {
performSegueWithIdentifier("segC", sender: nil)
}
回答by Dharmbir Singh
SWIFT
迅速
You can do in swiftlike this
你可以像这样快速地做
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){
}
回答by Axel Guilmin
Prakash response also work in interface builder.
Prakash 响应也适用于界面构建器。
Drag a UIView
in the UINavigationItem
, then you can put several UIButton
as children of this UIView
and create a hierarchy like so :
拖动UIView
的UINavigationItem
,那么你可以把几个UIButton
作为这个孩子UIView
,创造像这样一个层次结构:
Set the background color of the UIView
to clear and add some constraints to center vertically the buttons and fix the horizontal position. Here is the result I got with zero line of code:
将 的背景颜色设置UIView
为清除并添加一些约束以垂直居中按钮并固定水平位置。这是我用零行代码得到的结果:
回答by prakash
You can create a UIView and add two buttons in that view. And add that UIView as right button :)
您可以创建一个 UIView 并在该视图中添加两个按钮。并将该 UIView 添加为右键:)
UIView* rightItem = [UIView alloc] initWithFrame:frame];
//Create UIButton1 b1
//Create UIButton2 b2
[rightItem addSubview:b1];
[rightItem addSubview:b2];
self.navigationItem.rightBarButtonItem = rightItem;
回答by Alberto Bailac Moreno
In SWIFT, you can add this code to set up two buttons on the right (or left) side:
在 SWIFT 中,您可以添加此代码以在右侧(或左侧)设置两个按钮:
self.navigationItem.rightBarButtonItems = [UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Action, target: self, action: "barButtonItemClicked"), UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "barButtonItemClicked")]