如何在沒有XIB的情況下將2個按鈕添加到UINavigationBar
?
2個按鈕應該對齊在UINavigationBar
的右側。如何在沒有IB的情況下在右側的UINavigationbar中添加2個按鈕?
我知道如何添加一個按鈕,但如何處理兩個?
如何在沒有XIB的情況下將2個按鈕添加到UINavigationBar
?
2個按鈕應該對齊在UINavigationBar
的右側。如何在沒有IB的情況下在右側的UINavigationbar中添加2個按鈕?
我知道如何添加一個按鈕,但如何處理兩個?
您可以創建一個UIView並在該視圖中添加兩個按鈕。 並添加的UIView作爲右鍵:)
UIView* rightItem = [UIView alloc] initWithFrame:frame];
//Create UIButton1 b1
//Create UIButton2 b2
[rightItem addSubview:b1];
[rightItem addSubview:b2];
self.navigationItem.rightBarButtonItem = rightItem;
我posted code(見下文)兩個按鈕添加到的導航欄的右側。您可以設置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];
這是我發現的第一篇文章,其中包括額外的工具欄設置這使得它與不同的背景顏色工作,謝謝 – Chris 2011-04-12 21:06:33
這是這個問題的正確答案....代碼在這個鏈接工作完美...你真棒男人...歡呼... :)所有其他答案在以上是錯誤的,不起作用 – 2011-09-27 06:23:22
當您將navigationController作爲UIPopoverController的contentViewController呈現時,解決方案無法正常工作。當您將UIToolbar設置爲leftBarButtonItem的自定義視圖時,第二個按鈕的觸摸區域不正確(向左移動,這意味着第二個按鈕的右側不可點擊)。當涉及到rightBarButtonItem,第二個按鈕繪製錯誤(只繪製左側)...在這種情況下,我將不得不堅持使用自定義UIToolbar作爲標題,而不是UINavigationBar我認爲... – manicaesar 2012-01-17 12:03:26
您可以使用一個工具欄爲自定義視圖初始化一個欄按鈕。
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或更高版本
@SameeraChathuranga你不能只是複製和粘貼這段代碼而不做任何事情。你必須確保'self.editButtonItem'&'someOtherButton'被首先定義在某處... – Nathan 2011-12-01 23:31:01
嗨!感謝您的摘錄。使用我成功添加了兩個按鈕,但有一個小問題。 [Here](http://s12.postimg.org/53x5je565/Screen_Shot_2013_05_31_at_4_46_35_PM.png)的外觀。正如你所看到的,工具欄周圍有一個方形的邊框。我怎樣才能刪除它,並使其像上面截圖中的那樣無縫連接?謝謝。 :) – Isuru 2013-05-31 11:18:25
奇怪,我沒有得到「添加」按鈕的邊框。如果我使用沒有圖標的UIBarButtonStyles,我只會獲得邊框。 – pojo 2013-09-03 12:37:30
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];
萬一有人來這裏,像我,尋找一個MonoTouch的答案,看看沒有比NavigationItem.RightBarButtonItems
陣列進一步。
您不必添加兩個按鈕。你只需要添加
UIBarButtonSystemItemFlexibleSpace
不
UIBarButtonSystemItemFixedSpace
和一個按鈕,所以,這將是在右側。
像這樣:
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];
與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]];
從iOS 5的開始,很容易實現。 UINavigationItem能夠在條的左側和右側有多個按鈕。
:
(假設你有一個導航控制器)在根控制器使用此代碼:
左: ..
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
}
這裏是我當前的項目工作示例:
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];
斯威夫特:
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)
種
方法按鈕:
func methodA() {
performSegueWithIdentifier("segA", sender: nil)
}
func methodB() {
performSegueWithIdentifier("segB", sender: nil)
}
func methodC() {
performSegueWithIdentifier("segC", sender: 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;
在SWIFT,您可以添加以下代碼來設置兩個按鈕右側(或左側):
self.navigationItem.rightBarButtonItems = [UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Action, target: self, action: "barButtonItemClicked"), UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "barButtonItemClicked")]
您可以在swift這樣做
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){
}
Prakash響應也適用於界面構建器。
將在UINavigationItem
一個UIView
,那麼你可以把幾個UIButton
因爲這UIView
的孩子,並創建一個層次,像這樣:
設置UIView
的背景色來清除,並添加一些垂直居中按鈕和固定水平位置的限制。這是我與零線的代碼得到的結果:
這工程!對於那些和我一樣困惑的人,我所做的就是用UIView替換Bar Button Item,而不是像前面所描述的那樣將它拖到UINavigationItem中。之後,它將完全相同,例如將按鈕拖到場景中並添加約束。因爲沒有任何代碼,我現在可以做到這一點,並通過在故事板中拖動按鈕來創建對不同場景的延續:)謝謝! – Bruce 2015-07-26 07:45:40
這根本不需要。您只需將條形按鈕項目拖動到右側的條形按鈕即可。 Xcode 7.3.1 – 2016-05-11 16:23:09
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)
}
這裏是斯威夫特4碼:
let editImage = UIImage(named: "plus")!
let searchImage = UIImage(named: "search")!
let editButton = UIBarButtonItem(image: editImage, style: .plain, target: self, action:#selector(didTapEditButton))
let searchButton = UIBarButtonItem(image: searchImage, style: .plain, target: self, action:#selector(didTapSearchButton))
navigationItem.rightBarButtonItems = [editButton, searchButton]
@objc func didTapEditButton(sender: AnyObject){
}
@objc func didTapSearchButton(sender: AnyObject){
}
這使我的應用程序崩潰? – Nathan 2010-11-05 07:34:12
@NathanReed,它應該是'self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightItem];'(下面的全部工作代碼示例[由我]) – Adnan 2014-09-05 06:01:00