Lorsque j'essaie d'utiliser une image pour un UIBarButtonItem, le texte n'est pas affiché. Est-il possible d'afficher le texte et l'image?
Vous pouvez initialiser UIBarButtonItem avec un affichage personnalisé contenant à la fois une image et du texte. Voici un exemple qui utilise un UIButton.
UIImage *chatImage = [UIImage imageNamed:@"08-chat.png"];
UIButton *chatButton = [UIButton buttonWithType:UIButtonTypeCustom];
[chatButton setBackgroundImage:chatImage forState:UIControlStateNormal];
[chatButton setTitle:@"Chat" forState:UIControlStateNormal];
chatButton.frame = (CGRect) {
.size.width = 100,
.size.height = 30,
};
UIBarButtonItem *barButton= [[[UIBarButtonItem alloc] initWithCustomView:chatButton] autorelease];
self.toolbar.items = [NSArray arrayWithObject:barButton];
Je suggère un moyen de faire cela en utilisant Storyboard:
Placez UIButton et UILabel dans une vue. Vous pouvez utiliser des contraintes pour ajuster leurs positions. Aussi, vous pouvez les mettre en dehors d'une Vue, par exemple, légèrement plus haut ou moins (comme sur ma photo). Mettez les images par défaut et en surbrillance pour UIButton.
Copy Bar Button Item et ajustez les autres boutons. Ajouter des espaces flexibles.
Créer des points de vente.
Terminé :). Lorsque vous exécutez l'application, vous obtenez la barre d'outils comme ceci:
P.S. Ici vous pouvez lire comment créer une sous-classe UIToolbar en utilisant .xib
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
[button addTarget:target action:@selector(buttonAction:)forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(0, 0, 53, 31)];
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(3, 5, 50, 20)];
[label setFont:[UIFont fontWithName:@"Arial-BoldMT" size:13]];
[label setText:title];
label.textAlignment = UITextAlignmentCenter;
[label setTextColor:[UIColor whiteColor]];
[label setBackgroundColor:[UIColor clearColor]];
[button addSubview:label];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = barButton;
La réponse de Kris Markel est un bon début (seulement <iOS7), mais si vous utilisez la teinte, cela fonctionnera pour l'image et l'état en surbrillance du bouton.
J'ai créé une catégorie qui créera un UIBarButtonItem (leftBarButtonItem) qui ressemble et se comporte comme un bouton arrière iOS7 normal. Consultez: https://github.com/Zero3nna/UIBarButtonItem-DefaultBackButton
Swift Update pour UIBarButtonItem avec une vue personnalisée contenant à la fois une image et du texte.
var chatImage: UIImage = UIImage(named: "YourImageName")
var rightButton : UIButton = UIButton(type: UIButtonType.custom)
rightButton.setBackgroundImage(rightImage, for: .normal)
rightButton.setTitle(title, for: .normal)
rightButton.frame.size = CGSize(width: 100, height: 30)
let menuUIBarButtonItem = UIBarButtonItem(customView: rightButton)
Swift 4.2 avec cible
extension UIBarButtonItem {
convenience init(image :UIImage, title :String, target: Any?, action: Selector?) {
let button = UIButton(type: .custom)
button.setImage(image, for: .normal)
button.setTitle(title, for: .normal)
button.frame = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
if let target = target, let action = action {
button.addTarget(target, action: action, for: .touchUpInside)
}
self.init(customView: button)
}
}