11
votes

iPhone: faire de l'uibarbuttonitem qui est en forme de flèche

J'ai un uibarbuttonitem sur une barre de navigation. Je voudrais le faire en forme de flèche. Par ce que je veux dire, je veux que ce soit carré sauf un côté pointu. Est-ce que quelqu'un sait comment faire cela?

merci!


0 commentaires

6 Réponses :


4
votes

Vous pouvez créer un UIImageView ou un uibutton avec l'image requise, puis utilisez:

[[UIBarButtonItem alloc] initWithCustomView: arrowButton];


0 commentaires

7
votes

faire un arrière-plan personnalisé. Voir Création d'un bouton de flèche gauche ( comme le style "arrière" d'Uinavigationbar) sur un uitoolbar pour comment.


Vous pouvez -pushnavigationItem: animé: Pour que le bouton arrière intégré apparaisse, bien que vous ne puissiez pas Attribuez des actions personnalisées à elle.


pour des méthodes sans papiers, vous pouvez utiliser xxx

pour créer un "bouton" ".


4 commentaires

@Matt: Ce n'est pas un type de bouton intégré.


Rapide Hack, un peu trop tard: un bouton avant est un bouton arrière avec une transformation = échelle (-1,1) et dont la TextLabel a une transformation = échelle (-1,1).


Si vous deviez utiliser [Bouton UIBUTTONWITHTYPE: 101]; Comment allez-vous changer de "TintColor"?


@kennytm Comment le faire à Swift?



17
votes

J'ai battu avec plusieurs approches sur celui-ci et finalement compris à l'aide de toutes les réponses de plusieurs sources. Il y a quelques astuces; Cet extrait montrant tout (je créais un personnalisé , mais vous pouvez l'adapter facilement pour tout uibarbuttonitem ): xxx

Remarque: il s'avère que si vous essayez de définir la cible et l'action directement sur l'élément du bouton après avoir attribué une vue personnalisée à l'aide d'un uibutton qu'il ne faudra pas - vous devez définir la cible et l'action Sur le bouton lui-même - apparemment, le NAVBAR utilise le bouton fourni Verbatim.

C'est l'image que j'utilisais sur le noir opaque NAVBAR (Vous pouvez également utiliser quelque chose, évidemment): http://raretiger.com/images/forwardbutton.png


2 commentaires

Vous pouvez télécharger, compatible Retina compatible, images transparentes ici: [link] . com / actifs / docs / arrow-buttons.zip [/ link] La flèche arrière a une carte gauche de 15, l'avant de 5 (à la taille normale des boutons.)


Vous avez une fuite de mémoire où vous allouez uibarbuttonitem 'retenir +1' puis l'affectant à la propriété droitebarbuttonitem "retenir +1". Ce qui signifie que Uibarbuttonitem aura maintenant une retenue compte de 2 et ne sera jamais libéré. Vous devez avoir une autorelease uibarbuttonitem: self.navigentitem.rightbarbuttonitem = [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[UIBARBUTTONITEM ALLOC] INITWITHCUSTOMVIEW: Forwardbutton] Autoréleuillet];



0
votes

Continuer sur @plamen Dragozov's Isson: J'ai remarqué que si vous quittez l'UIBUTTON, cela déclencherait un ajustement de la photo lorsqu'il est touché et c'est tout à fait le contraire à un bouton de navigation normal. Donc, ce que j'ai fait était de décocher "Ajuste en surbrillance de l'image" et cela fonctionne comme un charme.

J'espère que cela aide les débutants comme moi.


0 commentaires

0
votes

Solution plus élégante:

UIBarButtonItem * backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain target:self action:@selector(back:)];
[backButtonItem setBackgroundImage:[UIImage imageNamed:@"back.png"]      forState:UIControlStateNormal     barMetrics:UIBarMetricsDefault];
self.navigationItem.leftBarButtonItem = backButtonItem;


0 commentaires

0
votes

Mon problème renouait le bouton arrière qui apparaît sur le contrôleur d'affichage poussé. J'ai trouvé une solution de contournement sale et si vous ignorez le problème d'animation non idéal, vous obtiendrez un bouton de retour avec le titre souhaité.

L'astuce consiste à modifier le titre de la première VC dans ViewWilldisappear Code> et ré-réglez-le du cours dans ViewWillappappear Code> P>

(Inutile de dire, par défaut, s'il n'y a pas de gauchebarbuttonitem code> SET, UINAVIGATIONCONTROLLER CODE> affichera un bouton arrière avec le titre de la VC qui a poussé le VC actuel) P>

dans la VC où vous appuyez sur votre VC actuel, faites P>

-(void) viewWillDisappear:(BOOL) animated {
  [super viewWillDisappear:animated];
  self.title = @"Back";
}

-(void) viewWillAppear:(BOOL) animated {
  [super viewWillAppear:animated];
  self.title = @"Original Title";
}


0 commentaires