IB के बिना दाईं ओर UINavigationbar में 2 बटन कैसे जोड़ें?


86

मैं UINavigationBarबिना XIB के 2 बटन कैसे जोड़ सकता हूं ?
2 बटन को दाईं ओर संरेखित किया जाना चाहिए UINavigationBar

मुझे पता है कि मैं एक बटन कैसे जोड़ सकता हूं, लेकिन दो के बारे में कैसे?

जवाबों:


142

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 में भी उपलब्ध है।
.मद

1
अच्छा और सरल! मैंने मौजूदा राइट बटन (IB में सेट) UIBarButtonItem * btnCurrent = self.navigationItem.rightBarButtonItem भी शामिल किया;
डंकन

43

मैंने नेविगेशनबार के दाईं ओर दो बटन जोड़ने के लिए कोड (नीचे देखें) पोस्ट किया । आप 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];

यह पहली पोस्ट थी जिसमें मैंने पाया कि अतिरिक्त टूलबार सेट किया गया है जो इसे अलग-अलग पृष्ठभूमि के रंगों के साथ काम करता है, धन्यवाद
क्रिस

इस प्रश्न के लिए यह सही उत्तर है .... इस लिंक में कोड पूरी तरह से काम कर रहा है ... आप भयानक आदमी हैं ... चीयर्स ... :) उपरोक्त सभी अन्य उत्तर गलत हैं और काम नहीं कर रहे हैं
समीरा चतुरंगा

समाधान पूरी तरह से काम नहीं करता है, जब आप नेविगेशनकंट्रोलर को UIPopoverController के contentViewController के रूप में प्रस्तुत करते हैं। जब आप यूआईटूलबार को बाईं ओर के बटन के कस्टम दृश्य के रूप में सेट करते हैं, तो दूसरे बटन का स्पर्श क्षेत्र गलत है (बाईं ओर स्थानांतरित कर दिया गया है, जिसका अर्थ है कि दूसरे बटन के दाईं ओर क्लिक करने योग्य नहीं है)। जब यह दाईं ओर आता है बरट्टन इटेम, दूसरा बटन गलत तरीके से खींचा जाता है (केवल इसका बाईं ओर खींचा जाता है) ... इस मामले में मुझे UINavigationBar I के बजाय हेडर के रूप में कस्टम UIToolbar का उपयोग करने के लिए छड़ी करना होगा ...
manicaesar

1
यहाँ एक तरकीब है tools.barStyle = -1लाइन की: इसके बिना कुछ दृश्य कलाकृतियाँ हैं यदि आप पारभासी = हाँ के साथ UIBarStyleBlack का उपयोग करते हैं। (सामान्य रूप से पृष्ठभूमि का रंग नौसेना पट्टी से मेल नहीं खाता है।) क्या यह एक अनिर्दिष्ट सुविधा है? यदि हां, तो यह कोड एक तरह से नाजुक है। मैंने डॉक्स में कहीं भी नहीं देखा है।
२१:४० बजे ettore

28

आप कस्टम दृश्य के रूप में टूलबार के साथ आरम्भ बार बटन का उपयोग कर सकते हैं ।

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 या उसके बाद के लिए अप्रचलित है


3
@SameeraChathuranga आप बस कुछ भी किए बिना इस कोड को कॉपी और पेस्ट नहीं कर सकते। आपको यह सुनिश्चित करना चाहिए कि 'self.editButtonItem' और 'someOtherButton' कहीं पहले परिभाषित किए गए हैं ...
नाथन

नमस्ते! स्निपेट के लिए धन्यवाद। इसके प्रयोग से मैंने दो बटन सफलतापूर्वक जोड़े लेकिन एक छोटी सी समस्या है। यहाँ यह कैसे दिखता है। जैसा कि आप देख सकते हैं, टूलबार के चारों ओर एक मामूली वर्ग जैसी सीमा दिखाई देती है। मैं इसे कैसे हटा सकता हूं और इसे सहज बना सकता हूं जैसे कि आपके पास ऊपर दिए गए स्क्रीनशॉट में है? धन्यवाद। :)
इसुरु

अजीब, मुझे "ऐड" बटन पर बॉर्डर नहीं मिलता है। मुझे केवल एक बॉर्डर मिलता है अगर मैं UIBarButtonStyles का उपयोग करता हूं जिसमें एक आइकन नहीं है।
पूजो

23

यहाँ मेरी वर्तमान परियोजना से काम कर उदाहरण है:

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];

18
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];

14

स्विफ्ट:

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

9

स्विफ्ट

आप इस तरह से स्विफ्ट में कर सकते हैं

        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){
        
        }

7

आप एक UIView बना सकते हैं और उस दृश्य में दो बटन जोड़ सकते हैं। और उस UIView को दाहिने बटन के रूप में जोड़ें :)

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

self.navigationItem.rightBarButtonItem = rightItem;

@NathanReed, यह self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView: rightItem];(मेरे द्वारा [नीचे पूर्ण काम कोड नमूना) होना चाहिए
अदनान

7

प्रकाश प्रतिक्रिया इंटरफ़ेस बिल्डर में भी काम करती है।

एक को UIViewअंदर खींचें UINavigationItem, फिर आप इसमें से कई UIButtonबच्चों को डाल सकते हैं UIViewऔर इस तरह एक पदानुक्रम बना सकते हैं:

3 बटन पदानुक्रम के साथ नेविगेशन बार

UIViewस्पष्ट करने के लिए पृष्ठभूमि का रंग सेट करें और कुछ बाधाओं को लंबवत रूप से बटन केंद्र करने और क्षैतिज स्थिति को ठीक करने के लिए जोड़ें। यह परिणाम मुझे कोड की शून्य रेखा के साथ मिला:

सिम्युलेटर में परिणाम


1
यह काम! उन लोगों के लिए जो मेरे जैसे ही भ्रमित थे, मैंने जो किया वह बार बटन आइटम को यूआईएनवाईवाई के साथ बदलने के बजाय यूआईनेविटेशन के रूप में वर्णित किया गया था। उसके बाद यह बिल्कुल वैसा ही होगा जैसे आपके दृश्य में बटन खींचना और बाधाओं में जोड़ना। इस समाधान के लिए यश क्योंकि किसी भी कोड के बिना अब मैं इस कहानी को अलग-अलग दृश्यों में सिर्फ कहानी को खींचकर अलग दृश्यों का निर्माण कर सकता हूं :) धन्यवाद!
ब्रूस

2
इसकी जरूरत बिल्कुल नहीं है। आप बार बटन आइटम को दाईं ओर बटन पर खींच सकते हैं। Xcode 7.3.1
जोओ न्यून्स

4

SWIFT में, आप दाईं ओर (या बाईं ओर) दो बटन सेट करने के लिए इस कोड को जोड़ सकते हैं:

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


3

यहाँ स्विफ्ट 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){

  }

2

आपको दो बटन नहीं जोड़ने हैं। आपको बस जोड़ने की जरूरत है

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];   

2
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;

1

यदि कोई व्यक्ति यहां आता है, तो मेरी तरह, मोनोऑउट उत्तर की तलाश में, NavigationItem.RightBarButtonItemsसरणी से आगे नहीं देखो ।


1

स्विफ्ट में:

(मान लें कि आपके पास एक नौसेना नियंत्रक है) रूट नियंत्रक में इस कोड का उपयोग करें:

बाएं: ..

    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

}

0
    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)
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.