J'essaie de comprendre comment puis-je obtenir quelque chose comme ceci:
Ceci est une barre d'outils et j'aimerais conserver le texte du titre du bouton sans avoir à créer l'image entière avec l'icône ET le texte. Comment puis-je ajouter l'icône à gauche de la UIBarButtonItem
tout en conservant le texte défini avec:
UIBarButtonItem *customBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Button" style:UIBarButtonItemStyleBordered target:nil action:nil];
MODIFIER
C'est ce que j'ai réalisé avec le code suivant:
UIButton *customButton = [UIButton buttonWithType:UIButtonTypeCustom];
[customButton setImage:[UIImage imageNamed:@"Test"] forState:UIControlStateNormal];
[customButton setTitle:@"Button" forState:UIControlStateNormal];
customButton.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 0, 0);
[customButton sizeToFit];
UIBarButtonItem *customBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:customButton];
Deux problèmes ici: le premier est la taille de la variable UIButton
et le second est que, comme vous pouvez le voir dans le gif, le bouton ne s'anime pas correctement lorsque je tape à l'intérieur du bouton et quand je relâche le robinet. Des idées?
Vous pouvez incorporer un UIButton en tant que vue personnalisée dans votre UIBarButtonItem. Vous pouvez créer votre UIButton comme vous le souhaitez, y compris avec une image et du texte, en utilisant -setImage:forState:
et -setTitle:forState:
.
UIButton* customButton = [UIButton buttonWithType:UIButtonTypeCustom];
[customButton setImage:[UIImage imageNamed:@"image"] forState:UIControlStateNormal];
[customButton setTitle:@"Button" forState:UIControlStateNormal];
[customButton sizeToFit];
UIBarButtonItem* customBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:customButton];
self.navigationItem.leftBarButtonItem = customBarButtonItem; // or self.navigationItem.rightBarButtonItem
Notez que pour ce faire, vous devez attacher vos méthodes IBAction à customButton
et non à customBarButtonItem
.
Pour plus d'informations, voir la documentation de initWithCustomView:
.
Vous pouvez également faire tout cela dans le générateur d'interface en faisant simplement glisser un bouton UIB dans la fente du bouton de la barre de gauche/du bouton de la barre de droite sur une barre de navigation.
Je n’étais pas satisfait de toutes les solutions trouvées sur le dépassement de pile, car j’aime la façon dont UIBarButtonItenm convertit les images afin qu’elles soient affichées correctement et qu’elles puissent être modifiées avec la couleur de la teinte. J'ai donc découvert cette solution que je peux utiliser sans trop de code ... L'effet End est similaire à la barre d'outils de Facebook et à d'autres applications actuelles ...
Lorsque vous modifiez la couleur de la teinte de la vue contenue dans UIBArButtonItem, les couleurs de l'image et du titre changent en conséquence, vraiment cool, je n'ai pas du tout à créer d'images spéciales.
Ce code est appelé depuis chaque bouton comme ce bouton Compétition, et le bouton est également défini comme prise de référencement ...
- (void)selectButton:(UIButton *)sender {
_competitionButton.superview.tintColor = [UIColor lightGrayColor];
_usersButton.superview.tintColor = [UIColor lightGrayColor];
_managementButton.superview.tintColor = [UIColor lightGrayColor];
sender.superview.tintColor = [UIColor whiteColor];
}
- (IBAction)onCompetitionButtonClick:(UIButton *)sender {
[self selectButton:sender];
[_scrollView scrollToPage:0 of:3];
}
Dans Button comme celui-ci intitulé Competition, il n'y a que le titre et dans le bouton barre il y a une image ... C'est comme ça que je l'ai configuré et ça marche, peut-être qu'il y a aussi d'autres possibilités.
Alors j’ai réussi à faire ma solution par programme ... Certains utilisateurs ne se plaignent pas de le faire ... Alors, comment créer UTToolbar avec une image et un élément de sorte que vous puissiez changer la couleur de bouton par teinte et modifier magiquement l’image ainsi que le titre étiquette? Ma solution d’éditeur d’interface utilisateur fonctionne à coup sûr ... Ce code permet de clarifier les choses davantage et vous pouvez le faire par programme ...
- (void)loadToolbar {
NSMutableArray *items = NSMutableArray.new;
[items add:[UIBarButtonItem createWithItem:UIBarButtonSystemItemFlexibleSpace :nil :nil]];
for (uint pageIndex = 0; pageIndex < _controllers.count; ++pageIndex) {
UIView *itemView = [UIView.alloc initWithFrame:CGRectMake(0, 0, 100, 44)];
itemView.backgroundColor = [UIColor clearColor];
itemView.tintColor = [UIColor orangeColor];
[itemView addSubview:[self createToolbarForItemView:pageIndex]];
[itemView addSubview:[self createButtonForItemView:pageIndex]];
UIBarButtonItem *item = [UIBarButtonItem.alloc initWithCustomView:itemView];
item.style = UIBarButtonItemStylePlain;
[items add:item];
[items add:[UIBarButtonItem createWithItem:UIBarButtonSystemItemFlexibleSpace :nil :nil]];
}
[_toolbar setItems:items];
}
- (UIButton *)createButtonForItemView:(uint)pageIndex {
UIButton *itemButton = [UIButton buttonWithType:UIButtonTypeSystem];
itemButton.frame = CGRectMake(0, 0, 100, 44);
itemButton.titleLabel.font = [UIFont systemFontOfSize:11];
itemButton.contentEdgeInsets = UIEdgeInsetsMake(30, 0, 0, 0);
itemButton.text = [_controllers[pageIndex] tabTitle];
itemButton.touchUp = ^(UIButton *sender) {
for (UIButton *button in _buttons) button.superview.tintColor = UI.toolBarInactiveButtonTextColor;
sender.superview.tintColor = UI.toolBarActiveButtonTextColor;
[self showPage:pageIndex];
};
[_buttons add:itemButton];
return itemButton;
}
- (UIToolbar *)createToolbarForItemView:(uint)pageIndex {
UIToolbar *itemToolbar = [UIToolbar.alloc initWithFrame:CGRectMake(0, 0, 100, 44)];
itemToolbar.tintColor = nil;
itemToolbar.barStyle = _toolbar.barStyle;
itemToolbar.translucent = _toolbar.translucent;
UIBarButtonItem *imageItem = [_controllers[pageIndex] tabImageItem];
imageItem.style = UIBarButtonItemStylePlain;
imageItem.tintColor = nil;
imageItem.imageInsets = UIEdgeInsetsMake(-10, 0, 0, 0);
itemToolbar.items = @[
[UIBarButtonItem createWithItem:UIBarButtonSystemItemFlexibleSpace :nil :nil],
imageItem,
[UIBarButtonItem createWithItem:UIBarButtonSystemItemFlexibleSpace :nil :nil]
];
return itemToolbar;
}
J'ai résolu ce problème comme suit:
[Button **setTitleColor**:[UIColor colorWithRed:129/255.0f green:124/255.0f blue:110/255.0f alpha:1.0f] forState:**UIControlStateHighlighted**];