2010-09-07 8 views
116

मैं UIBarButtonItems प्रोग्रामेटिक रूप से बनाना चाहता हूं और इन निश्चित स्थान वस्तुओं को बटन के बीच रखना चाहता हूं।प्रोग्रामिक रूप से निश्चित स्थान और लचीली स्पेस बार बटन आइटम कैसे बनाएं?

उत्तर

266
UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
fixedItem.width = 20.0f; // or whatever you want 

UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
+41

ध्यान दें कि स्थापित करने के लिए एक फिक्स्ड स्पेस UIBarButtonItem की चौड़ाई, आपको '.width' प्रॉपर्टी सेट करने की आवश्यकता है। –

+0

सही जवाब! –

+0

हम लचीली चौड़ाई कैसे कोड का उपयोग कर सभी बटनों के बीच बराबर दूरी दे सकते हैं? मैं हार्ड कोड चौड़ाई नहीं चाहता/20.0 – Satyam

7
UIBarButtonItem *todayItem = [[UIBarButtonItem alloc] initWithTitle:@"Today" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
todayItem.tag = 2; 

UIBarButtonItem *cashItem = [[UIBarButtonItem alloc] initWithTitle:@"Cash" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
cashItem.tag = 3; 

UIBarButtonItem *creditItem = [[UIBarButtonItem alloc] initWithTitle:@"Credit" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
creditItem.tag = 4; 

UIBarButtonItem *allItem = [[UIBarButtonItem alloc] initWithTitle:@"All" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
allItem.tag = 1; 

UIBarButtonItem *returnItem = [[UIBarButtonItem alloc] initWithTitle:@"Return" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)]; 
returnItem.tag = 5; 

UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[fixedItem setWidth:455.0f]; 

UIBarButtonItem *fixed2Item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[fixed2Item setWidth:37.0f]; 

UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

[self.toolbar setItems:@[fixed2Item, returnItem, creditItem, cashItem, fixedItem, todayItem, flexibleItem, allItem] animated:NO]; 
+0

* बाएं * आइटम पर * सही * बार बटन आइटम क्यों सेट कर रहे हैं? यह सिर्फ वास्तव में खराब शैली या एक बग है और मुझे नहीं पता कि कौन सा है। –

1

viewDidLoad में:

//toolbar 
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 416, 320, 44)]; 

// bar btns 
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(goBack)]; 
UIBarButtonItem *forwardBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward target:self action:@selector(goForward)]; 
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
UIBarButtonItem *bookmarkBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookmark)]; 
UIBarButtonItem *refreshBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh)]; 
UIBarButtonItem *stopLoadingBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(stopLoading)]; 

// add btns to the bar 
[toolBar setItems:[NSMutableArray arrayWithObjects:bookmarkBtn,backBtn,forwardBtn,flexibleSpace,refreshBtn,stopLoadingBtn, nil]]; 

// adds the toobar to the view 
[self.view addSubview:toolBar]; 

भी प्रत्येक बटन के लिए कार्रवाई (इस उदाहरण एक UIWebView में) को न भूलें:

-(void)goBack 
{ 
    [_webView goBack]; 
} 

-(void)goForward 
{ 
    [_webView goForward]; 
} 

आदि

6

स्विफ्ट

// Fixed Space 
let fixedSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) 
fixedSpace.width = 20.0 

// Flexible Space 
let flexibleSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
1
स्विफ्ट 3 के साथ

, UIBarButtonItem एक प्रारंभकर्ता init(barButtonSystemItem:target:action:) कहा जाता है।

convenience init(barButtonSystemItem systemItem: UIBarButtonSystemItem, target: Any?, action: Selector?) 

निर्दिष्ट सिस्टम आइटम वाली एक नया आइटम आरंभीकृत: init(barButtonSystemItem:target:action:) निम्नलिखित घोषणा की है।


UIBarButtonSystemItem एक गणन कि done, play, add या cancel सहित कई मामलों प्रदान करता है। हालांकि, आपकी आवश्यकताओं के अनुसार, आप flexibleSpace या fixedSpace मामलों का भी चयन कर सकते हैं।

रिक्त स्थान अन्य मदों के बीच जोड़ने के लिए:

flexibleSpace मामले निम्नलिखित घोषणा की है। अंतरिक्ष अन्य वस्तुओं के बीच समान रूप से वितरित किया जाता है। यह मान सेट होने पर अन्य आइटम गुणों को अनदेखा कर दिया जाता है।

रिक्त स्थान अन्य मदों के बीच जोड़ने के लिए:

fixedSpace मामले निम्नलिखित घोषणा की है। यह मान सेट होने पर केवल width प्रॉपर्टी का उपयोग किया जाता है।


इसलिए, आप प्रोग्राम निश्चित और लचीला स्पेस बार बटन आइटम बना सकते हैं जैसा कि नीचे दिखाया: एक उदाहरण के रूप

let flexibleSpace = UIBarButtonItem(
    barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, 
    target: nil, 
    action: nil 
) 
let fixedSpace = UIBarButtonItem(
    barButtonSystemItem: UIBarButtonSystemItem.fixedSpace, 
    target: nil, 
    action: nil 
) 
fixedSpace.width = 30 // Set width with the appropriate value 

, शो नीचे खेल का मैदान कोड दो केंद्र वाले प्ले के साथ एक निचला पट्टी कैसे जोड़ें और vi में 30 की निश्चित स्थान से अलग बार बटन को रोकें ew नियंत्रक:

import PlaygroundSupport 
import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.backgroundColor = .white 
     title = "Home" 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     // Show navigation controller’s built-in toolbar 
     navigationController?.setToolbarHidden(false, animated: false) 

     // Create UIBarButtonItems 
     let flexibleSpace1 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 
     let playItem = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: nil) 
     let fixedSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) 
     fixedSpace.width = 30 
     let pauseItem = UIBarButtonItem(barButtonSystemItem: .pause, target: self, action: nil) 
     let flexibleSpace2 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 

     // Set the view controller toolbar items 
     setToolbarItems([flexibleSpace1, playItem, fixedSpace, pauseItem, flexibleSpace2], animated: false) 
    } 

    override func viewWillDisappear(_ animated: Bool) { 
     // Hide navigation controller’s built-in toolbar 
     navigationController?.setToolbarHidden(true, animated: true) 

     super.viewWillDisappear(animated) 
    } 

} 

let viewController = ViewController() 
let navigationController = UINavigationController(rootViewController: viewController) 
PlaygroundPage.current.liveView = navigationController 

पूर्वावलोकन खेल का मैदान सहायक संपादक में आपके विचार नियंत्रक देखेंसहायक संपादक का उपयोगदिखाएँ सहायक संपादक

enter image description here

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^