Comment créer des éléments de bouton d’espace fixe et de barre d’espace flexible par programmation?

Je veux créer UIBarButtonItems programmation et placer ces éléments d’espace entre les boutons.

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

Rapide

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

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

N’oubliez pas les actions pour chaque bouton également (dans cet exemple un UIWebView):

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

etc.

Avec Swift 3, UIBarButtonItem a un initialiseur appelé init(barButtonSystemItem:target:action:) . init(barButtonSystemItem:target:action:) a la déclaration suivante:

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

Initialise un nouvel élément contenant l’élément système spécifié.


UIBarButtonSystemItem est une énumération qui offre de nombreux cas, y compris la UIBarButtonSystemItem , la play , l’ add ou l’ cancel . Cependant, selon vos besoins, vous pouvez également choisir flexibleSpace cas flexibleSpace ou fixedSpace .

cas flexibleSpace a la déclaration suivante:

Espace vide à append entre les autres éléments. L’espace est réparti également entre les autres éléments. Les autres propriétés de l’élément sont ignorées lorsque cette valeur est définie.

fixedSpace cas de fixedSpace a la déclaration suivante:

Espace vide à append entre les autres éléments. Seule la propriété width est utilisée lorsque cette valeur est définie.


Par conséquent, vous pouvez créer des éléments de bouton de barre d’espace fixes et flexibles par programmation, comme indiqué ci-dessous:

 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 

Par exemple, le code Playground ci-dessous montre comment append une barre inférieure avec deux éléments de bouton de barre de lecture et de pause centrés séparés par un espace fixe de 30 dans un contrôleur de vue:

 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 

Prévisualisez votre contrôleur de vue dans l’éditeur de l’assistant Playground à l’aide de ViewAssistant EditorShow Assistant Editor

entrer la description de l'image ici