Je veux créer un UIBarButtonItem avec une image personnalisée, mais je ne veux pas de la bordure que l'iPhone ajoute, car mon image a une bordure spéciale.
C'est la même chose que le bouton retour mais un bouton avant.
Cette application est destinée à un projet inHouse, donc je m'en fiche si Apple la rejette, l'approuve ou l'aime :-)
Si j'utilise la propriété initWithCustomView: v de UIBarButtonItem, je peux le faire:
UIImage *image = [UIImage imageNamed:@"right.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
[button setBackgroundImage: [[UIImage imageNamed: @"right_clicked.png"] stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateHighlighted];
button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
[button addTarget:self action:@selector(AcceptData) forControlEvents:UIControlEventTouchUpInside];
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, image.size.width, image.size.height) ];
[v addSubview:button];
UIBarButtonItem *forward = [[UIBarButtonItem alloc] initWithCustomView:v];
self.navigationItem.rightBarButtonItem= forward;
[v release];
[image release];
Cela fonctionne, mais si je dois répéter ce processus dans 10 vues, ce n'est pas DRY.
Je suppose que je dois sous-classer, mais quoi?
- NSView?
- UIBarButtonItem?
Merci,
Cordialement,
ios
iphone
uibarbuttonitem
mongeta
la source
la source
Réponses:
Vous pouvez ajouter une méthode à UIBarButtonItem sans la sous-classer à l'aide de la catégorie personnalisée:
Ainsi, n'importe où dans votre code, vous pouvez créer un élément de barre appelant cette méthode (à condition d'inclure un en-tête avec sa déclaration).
PS Vous n'avez pas besoin d'utiliser 'v' UIView car vous pouvez créer
UIBarButtonItem
directement avec un bouton comme vue personnalisée.PPS Vous avez également besoin de [version avant] dans votre code.
la source
Une autre solution simple est
la source
J'ai trouvé cela facile. Il est suggéré par-dessus. "random.png" doit être dans le projet. Faites simplement glisser et déposez n'importe quelle image.
la source
Une alternative consiste à sous-classer UIBarButtonItem. Pourquoi? Pour que l'action soit appelée sur la cible avec l'expéditeur correct. Dans le code ci-dessus, l'argument de l'expéditeur dans le message d'action est l'instance UIButton, pas l'instance UIBarButtonItem. Cela serait important, par exemple, si vous souhaitez présenter un UIPopoverController à partir de l'élément du bouton de la barre. En sous-classant UIBarButtonItem, vous pouvez ajouter un ivar qui conserve la cible d'origine, permettant à nos instances de sous-classe d'intercepter, de modifier et de transmettre le message d'action avec l'expéditeur approprié.
Donc, CCFBarButtonItem.h:
et CCFBarButtonItem.m
la source
la source
Cela peut également être fait par programme (bien sûr):
Commencez par créer une vue personnalisée. Cette vue personnalisée peut contenir une image, un bouton ou tout ce que vous souhaitez. La vue personnalisée peut être créée par programme ou dans IB:
Ensuite, créez un UIBarButtonItem et initialisez-le avec la vue personnalisée.
Maintenant, ajoutez simplement le UIBarButton personnalisé au leftBarButtonItem:
la source
Ok cette catégorie fonctionne très bien car il n'y a aucun problème avec Popovercontroller :-)
la source
Découvrez cette solution simple.
Ici 1x1.png est une image png transparente de 1 pixel que vous pouvez télécharger à partir du lien ci-dessous
http://commons.wikimedia.org/wiki/File:1x1.png
la source
Une autre solution, pensez que c'est plus simple au cas où vous créez un bouton par programme:
la source