116 votes

UIActionSheet bouton annuler comportement étrange

J'ai un UIBarButtonItem l'ouverture d'une fiche d'action pour offrir aux utilisateurs des choix à faire. Tout fonctionne comme prévu, à moins que j'ai essayer de cliquer sur le bouton "Annuler". La cible du bouton de semble avoir déplacé là où il devrait être. Je ne peux l'activer en cliquant quelque part dans le milieu de la "Annuler" et les boutons "Ok".

alt text

J'ai essayé des fiches d'action dans d'autres applications, et ils fonctionnent très bien, donc ce n'est pas juste mon gros pouce. La feuille d'action est l'ouverture à un UIViewController

- (void)showOpenOptions
{
UIActionSheet *sheet = [[UIActionSheet alloc] 
	initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application")
	delegate:self
	cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
	destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link")
	otherButtonTitles:nil];

[sheet showInView:self.view];
[sheet release];
}

190voto

nevan king Points 46410

Au lieu de transmettre le point de vue actuel du contrôleur de la vue de la feuille d'action, l'utilisation de l' showFromTabBar: méthode de UIActionSheet.

Le Droit Chemin
Cela vous donnera le bon tappable zone:

[actionSheet showFromTabBar:self.tabBarController.tabBar];

La Mauvaise Façon
Cela mettra le tappable zone au mauvais endroit (si vous utilisez une barre d'onglet ou la barre d'outils):

[actionSheet showInView:self.view];

Si vous utilisez une barre d'outils, utilisez l' showFromToolbar: méthode à la place. Vous aurez besoin d'une référence à la barre d'outils, plus il est probable qu'un ivar

[actionSheet showFromToolbar:self.myToolbar];

Mon Ancienne Réponse fonctionne Aussi, mais est hacky:

Juste trouvé une réponse possible:

01-Dec-2008 10:22 PM Tom Saxton: J'ai regardé ce bug un peu plus, et il semble avoir un problème avec la tabbar.

Si vous appelez UIActionSheet [feuille de showInView:auto.vue] à partir d'une vue contrôleur est un enfant d'un UITabViewController, puis le coup d'essais sur le bouton annuler échoue dans la partie de la UIActionSheet qui se trouve au-dessus de la tabbar.

Si vous passez dans le UITabBarController, puis le UIActionSheet actes comme prévu.

REMARQUE: dans iPhone OS 2.1 et antérieures, la UIActionSheet est venu à partir de la partie supérieure de l'onglet de la barre lorsque vous passez à la vue enfant, mais en 2.2, il s'agit de la place en bas de la barre d'onglet, et couvre ainsi l'onglet affichage.

http://openradar.appspot.com/6410780

Edit: Il fonctionne correctement lorsque je change la vue à l'onglet de la barre de vue

[sheet showInView:self.parentViewController.tabBarController.view];

37voto

driveguy Points 578

J'ai trouvé une réponse ici qui fonctionne:

http://stackoverflow.com/questions/1174734/how-do-you-control-action-sheet-animation-direction

utilisation: [filterActionSheet showInView:[self.view window]];

j'ai essayé quelques façons d'obtenir de ma barre d'onglet et de la façon que cette application est mis en place, il semble compliquée...

22voto

Corey Floyd Points 16747

Au lieu d'utiliser:

[sheet showFromTabBar:theTabBar];

10voto

Viggnesh Points 177

Voici le correctif.Essayez ceci:

[actionsheet showInView:[UIApplication sharedApplication].keyWindow];

5voto

RawMean Points 1761

Je pense qu'une combinaison de trois des réponses est la bonne façon de traiter ce:

    [actionSheet showFromTabBar:self.tabBarController.tabBar];

c'est à dire, utiliser showFromTabBar (c'est pourquoi il en existe un) et vous n'avez pas besoin de la parentViewController que Nathan l'a indiqué (en fait, de soi.parentViewController.tabBarController.tabBar retourne néant pour 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