Je veux créer UIBarButtonItems
par programme et placer ces éléments d'espace fixe 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, 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 proposant de nombreux cas, dont done
, play
, add
ou cancel
. Toutefois, selon vos besoins, vous pouvez également choisir des cas flexibleSpace
ou fixedSpace
.
flexibleSpace
le cas a la déclaration suivante:
Espace vide à ajouter entre d'autres éléments. L'espace est réparti également entre les autres éléments. Les autres propriétés d'élément sont ignorées lorsque cette valeur est définie.
fixedSpace
le cas a la déclaration suivante:
Espace vide à ajouter entre d'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 ajouter 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 d'assistant de Playground à l'aide de View ▸ Assistant Editor ▸ Show Assistant Editor