33 votes

Ajout d'images aux boutons des UIActionSheet comme dans les UIDocumentIntera

Est-il possible d'ajouter une image aux boutons de l'application UIActionSheet tel que vu dans UIDocumentInteractionController ? Si c'est le cas, veuillez m'indiquer comment procéder.

0 votes

W

71voto

Eddie Gasparian Points 1606

Il y a une possibilité d'ajouter des images (pour être exact: des icônes ou des symboles) pour les boutons d'un UIActionSheet (ou UIAlertView) sans charger les fichiers d'image ou de bidouiller avec des (sous -) points de vue. Dans ces classes, les boutons sont spécifiés par leurs titres, qui sont des chaînes de caractères. Il est donc évident d'utiliser des symboles, qui permet de spécifier également par des cordes. La première m'est venu a l'aide de symboles unicode.

Puis j'ai découvert que plusieurs d'entre eux sont rendus que de jolies icônes sur iOS et comme on peut le voir par plusieurs symboles dans le Visualiseur de Caractères sur Mac OS, trop. Ainsi, les symboles peuvent être utilisés pratiquement partout une chaîne de caractères peut être définie.

Les inconvénients de cette approche sont:

  • Vous êtes limité à de symboles prédéfinis.
  • Pas tous les symboles sont rendus comme elles le devraient (par exemple, \u29C9).
  • Il peut y avoir des changements dans l'apparence de certains symboles sur les différentes versions iOS (par exemple, \U0001F533 sur iOS 5 et 6).

Voici quelques intéressantes symboles, entre autres:

Si vous souhaitez consulter rapidement comment un symbole ressemble (au moins sur Mac OS), vous pouvez utiliser la Calculatrice. Vérifiez certainement dans le simulateur: Par exemple, \u2B1C n'est pas une icône de la Calculatrice 10.7.1.

Captures d'écran:

UIActionSheet

UIActionSheet

Bouton de titres:

@"\U0001F6A9 \U0001F4CC \u26F3 \u2690 \u2691 \u274F \u25A4 Test"
@"\U0001F4D6 \U0001F30E \U0001F30F \u25A6 \U0001F3C1 \U0001F332 \U0001F333 \U0001F334 Test"

UIAlertView

enter image description here

Titre du bouton:

@"\u26A0 Yes"

UITableViewCell lorsque la case à cocher et d'autres icônes

UITableViewCell

1 votes

Incroyable, mais comme vous l'avez dit ** vous êtes limité aux symboles prédéfinis** mais c'est quand même une idée géniale, merci de l'avoir partagée.

0 votes

Peut-on gérer des événements lorsque l'on clique sur ces images ?

1 votes

@Jasmine : Cliquer sur une image revient à cliquer sur le bouton lui-même, car l'image est son étiquette.

27voto

Amit Points 1123

Essayez cette méthode, j'espère qu'elle vous aidera.

UIActionSheet * action = [[UIActionSheet alloc] 
                      initWithTitle:@"Title" 
                      delegate:self 
                      cancelButtonTitle:@"Cancel" 
                      destructiveButtonTitle:nil 
                      otherButtonTitles:@"",nil];

[[[action valueForKey:@"_buttons"] objectAtIndex:0] setImage:[UIImage imageNamed:@"yourImage.png"] forState:UIControlStateNormal];

[[[action valueForKey:@"_buttons"] objectAtIndex:0] setImage:[UIImage imageNamed:@"yourImage_Highlighted.png"] forState:UIControlStateHighlighted];

1 votes

Êtes-vous certain que cette méthode est légale et que je peux publier mon application sur l'App Store ?

0 votes

J'ai la même question ? L'application a-t-elle été soumise à l'app store avec ce code ?

1 votes

Cette proposition sera-t-elle rejetée ou non ?

6voto

audience Points 1633

L'UIActionSheet standard ne prend pas en charge les images.

Une façon d'ajouter une image au UIActionSheet est d'ajouter une sous-vue à la UIActionSheet . Il suffit de mettre en œuvre le UIActionSheetDelegate méthode willPresentActionSheet : comme ceci :

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
     UIImageView* buttonImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"picturename.png"]];
     // Set the frame of the ImageView that it's over the button.
     [actionSheet addSubview:buttonImage];
     [buttonImage release]; // only if you don't need this anymore
}

Je ne sais pas si l'image réagit au toucher, mais vous pouvez construire un UIActionSheet comme le UIDocumentInteractionController .

5voto

RawMean Points 1761

Voici une façon de procéder : https://github.com/levey/LeveyPopListView enter image description here

0 votes

Je ne pense pas qu'Android soit aussi raffiné :|

2voto

Andreas Zöllner Points 141

Je viens de créer une classe émulant l'aspect d'une UIActionSheet en utilisant des cellules de tableau supportant des images et du texte pour chaque ligne. Elle utilise également des blocs pour l'interaction, supporte l'iPhone et l'iPad, le popup à partir d'un UITabBarItem sur l'iPad et la mise en file d'attente de plusieurs feuilles. Encore en développement, mais n'hésitez pas à le cloner sur Github :

http://github.com/azplanlos/SIActionSheet

L'utilisation est assez simple, voici un exemple :

SIActionSheet* mySheet = [SIActionSheet actionSheetWithTitle:@"Action Sheet title"
    andObjects:[NSArray arrayWithObjects:
        [SIActionElement actionWithTitle:@"Item 1"
            image:[UIImage imageNamed:@"image"]
            andAction:^{NSLog(@"action 1");}]
    , nil]
    completition:^(int num) {
        NSLog(@"pressed %i", num);
    } cancel:^{NSLog(@"canceled");}];

mySheet.followUpSheet = anotherSheet;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        [mySheet show];
else
        [mySheet showFromTabBarItem:item inTabBar:tabBar];

Si vous rencontrez des problèmes, n'hésitez pas à m'en faire part. J'espère que cela aidera beaucoup de personnes ayant le même problème que moi...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X