Bagaimana cara menambahkan 2 tombol ke UINavigationBar
tanpa XIB?
2 tombol harus sejajar di sisi kanan UINavigationBar
.
Saya tahu bagaimana saya bisa menambahkan satu tombol, tapi bagaimana kalau dua?
Jawaban:
Dengan iOS 5+, semuanya semudah:
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]];
Saya memposting kode (lihat di bawah) untuk menambahkan dua tombol di sebelah kanan navigationBar. Anda dapat menyetel barStyle = -1
alih-alih membuat subclass 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];
tools.barStyle = -1
garis: tanpa itu ada beberapa artefak visual jika Anda menggunakan UIBarStyleBlack dengan translucent = YES. (Yaitu warna latar belakang tidak cocok dengan bilah navigasi.) Apakah itu fitur yang tidak terdokumentasi? Jika demikian, kode ini agak rapuh. Saya belum pernah melihatnya di mana pun di dokumen.
Anda dapat menggunakan tombol bar yang diinisialisasi dengan toolbar sebagai tampilan kustom.
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];
Akan memberikan sesuatu seperti ini:
Catatan: Jawaban ini sudah usang untuk iOS 6 atau lebih baru
Berikut adalah contoh kerja dari proyek saya saat ini:
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];
Cepat:
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)
Metode untuk tombol:
func methodA() {
performSegueWithIdentifier("segA", sender: nil)
}
func methodB() {
performSegueWithIdentifier("segB", sender: nil)
}
func methodC() {
performSegueWithIdentifier("segC", sender: nil)
}
Anda bisa melakukannya dengan cepat seperti ini
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){
}
Anda dapat membuat UIView dan menambahkan dua tombol di tampilan itu. Dan tambahkan UIView itu sebagai tombol kanan :)
UIView* rightItem = [UIView alloc] initWithFrame:frame];
//Create UIButton1 b1
//Create UIButton2 b2
[rightItem addSubview:b1];
[rightItem addSubview:b2];
self.navigationItem.rightBarButtonItem = rightItem;
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView: rightItem];
(contoh kode kerja lengkap di bawah [oleh saya])
Respons Prakash juga berfungsi di pembuat antarmuka.
Seret a UIView
di UINavigationItem
, lalu Anda dapat meletakkan beberapa UIButton
sebagai anak dari ini UIView
dan membuat hierarki seperti ini:
Atur warna latar belakang UIView
menjadi jelas dan tambahkan beberapa batasan ke tengah vertikal tombol dan perbaiki posisi horizontal. Ini adalah hasil yang saya dapatkan dengan baris kode nol:
Di SWIFT, Anda dapat menambahkan kode ini untuk mengatur dua tombol di sisi kanan (atau kiri):
self.navigationItem.rightBarButtonItems = [UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Action, target: self, action: "barButtonItemClicked"), UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "barButtonItemClicked")]
Dari iOS 5 dan seterusnya, itu mudah dicapai. UINavigationItem memiliki kemampuan untuk memiliki banyak tombol di sisi kiri dan kanan bilah.
Inilah kode Swift 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){
}
Anda tidak perlu menambahkan dua tombol. Anda hanya perlu menambahkan
UIBarButtonSystemItemFlexibleSpace
tidak
UIBarButtonSystemItemFixedSpace
dan sebuah tombol, sehingga posisinya berada di sisi kanan.
Seperti ini:
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;
Jika seseorang datang ke sini, seperti saya, mencari jawaban MonoTouch, tidak terlihat lagi selain NavigationItem.RightBarButtonItems
array.
di SWIFT:
(misalkan Anda memiliki nav. controller) di Root Controller gunakan kode ini:
kiri: ..
let leftBtn = UIBarButtonItem(title: "Do It", style: UIBarButtonItemStyle.Plain,
target: self, action: "doIt:")
leftBtn.tag=100
self.navigationItem.leftBarButtonItem = leftBtn
Baik:
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;
..
dimana:
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)
}