2010-09-07 16 views

Antwort

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

Beachten Sie, dass die festlegen Breite eines UIBarButtonItems mit festem Platz müssen Sie die '.width'-Eigenschaft festlegen. –

+0

perfekte Antwort! –

+0

Wie können wir flexible Breite haben geben Sie gleiche Abstände zwischen allen Tasten mit Code? Ich möchte nicht hart codieren width = 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

Warum setzen Sie * right * bar button Elemente auf * left * Elemente? Das ist nur ein wirklich schlechter Stil oder ein Bug und ich weiß nicht was. –

1

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

Vergessen Sie nicht, die Aktionen für jede Taste auch (in diesem Beispiel ein UIWebView):

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

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

usw.

6

Swift

// 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

Mit Swift 3, UIBarButtonItem hat einen Initialisierer genannt init(barButtonSystemItem:target:action:). init(barButtonSystemItem:target:action:) hat die folgende Erklärung ab:

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

Initialisiert ein neues Element die angegebene System Artikel enthält.


UIBarButtonSystemItem ist eine Aufzählung, die viele Fälle einschließlich done, play, add oder cancel bietet. Je nach Bedarf können Sie jedoch auch flexibleSpace oder fixedSpace Fälle auswählen.

flexibleSpace Fall hat die folgende Erklärung ab:

Leerzeichen zwischen anderen Elemente hinzuzufügen. Der Raum ist gleichmäßig auf die anderen Objekte verteilt. Andere Elementeigenschaften werden ignoriert, wenn dieser Wert festgelegt wird.

fixedSpace Fall hat die folgende Erklärung ab:

Leerzeichen zwischen anderen Elemente hinzuzufügen. Nur die width Eigenschaft wird verwendet, wenn dieser Wert festgelegt ist.


Daher können Sie feste und flexible Leertaste Taste, um Elemente programmatisch erstellen, wie unten dargestellt:

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 

Als Beispiel der Spielplatz Code unten zeigt wie man einen unteren Balken mit zwei zentrierten Play- und Pause-Button-Elementen hinzufügt, die durch einen festen Abstand von 30 in einem vi getrennt sind ew Controller:

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 

Vorschau Ihre View-Controller im Editor Spielplatz Assistent mit AnsichtAssistant Editoranzeigen Assistant Editor

enter image description here

Verwandte Themen