2010-12-15 5 views
24

J'ai utilisé une feuille d'action dans mon projet et quand il apparaît afficher tous les boutons mais le dernier (4ème) bouton ne répond pas à mon clic (seulement sa moitié répond)dernier bouton de la feuille d'action ne soit pas cliqué

Je sais la raison c'est parce que j'ai utilisé un TabBarController et la classe actuelle est dans ce contrôleur de tabulation .... seulement cette partie de la feuille d'action répond qui est au-dessus des onglets .... et mon dernier bouton est la moitié au-dessus et la moitié est au-dessus de TabBar

s'il vous plaît aider

+0

S'il vous plaît ajouter un peu de code, puis facilement nous pouvons vous aider à le résoudre. – jfalexvijay

+0

Vous ne pouvez pas utiliser l'une des méthodes showFromTabBar, si vous utilisez des tabulations personnalisées. stackr dire aux paris réponse! –

+0

@ WinDMak3r - Oui je sais et c'est pourquoi il a obtenu 32 upvotes :) – Saawan

Répondre

83

Je suggère d'utiliser ceci:

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

J'ai eu le même problème que vous avez et utilisez cette méthode pour montrer qu'il a fonctionné pour moi. Le TabBar veut rester la fenêtre principale ce qui fait apparaître votre bouton du bas ci-dessus, mais est en fait sous la barre d'onglets.

Espérons que cela fait l'affaire pour vous ..

Modifier

Si vous utilisez le mode paysage et la méthode ne fonctionne pas ci-dessus. Vous pouvez utiliser le correctif suivant:

@Vinh Tran: [Fiche showFromTabBar: self.parentViewController.tabBarController.tabBar]

+0

+1 --Il a travaillé merci ... – Saawan

+0

A travaillé super! Thanx – Ladislav

+0

Fonctionne Grands Merci – pa12

3

Quelle méthode utilisez-vous pour montrer votre Acti feuille de calcul. Essayez showFromTabBar: méthode

+0

J'ai l'utilisation -------- \t UIActionSheet * actionsheet = [[UIActionSheet alloc] initWithTitle: @ "Sélectionnez le type de flux" délégué: auto cancelButtonTitle: nil destructiveButtonTitle: none otherButtonTitles: @ "premier", @ "2e", @ "3e", @ "4e", néant]; \t [actionsheet showInView: self.view]; \t [libération de la feuille d'action]; – Saawan

+0

essayez d'utiliser la méthode que j'ai suggéré au lieu de showInView :. si je comprends bien, il est conçu pour gérer exactement votre cas (ne l'ai pas utilisé moi-même si ...) – Vladimir

+0

selon votre suggestion j'ai utilisé la méthode suivante ...... [actionsheet showFromTabBar: delegate.tabC.tabBar]; ... où delegate est l'objet de ma classe delegate où tabbarController tabC est ............... Mais mon programme CRASHED .... – Saawan

0

Le vrai problème vient, lorsque l'interface est orienté en mode paysage et le contrôleur de vue parent a une transformation à ce sujet. Croyez-moi, c'est un scénario réaliste, doh. Ensuite, la feuille d'action est tronquée et vous ne pouvez pas utiliser parentViewController car il est transformé. La solution pour éviter tous ces problèmes est de créer une nouvelle fenêtre, ajouter un contrôleur de vue rotatif comme rootViewController et utiliser sa vue pour afficher la feuille.

CGRect applicationRect = [[UIScreen mainScreen] bounds]; 
UIWindow* actionSheetWindow = [[UIWindow alloc] initWithFrame:applicationRect]; 
RotationViewController* rootViewController = [[RotationViewController alloc] initWithNibName:nil bundle:nil]; 
actionSheetWindow.rootViewController = rootViewController; 
[rootViewController release]; 
actionSheetWindow.hidden = NO; 

UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:nil]; 
[actionSheet setCancelButtonWithTitle:@"Cancel" handler:^{ 
    actionSheetWindow.hidden = YES; 
    [actionSheetWindow release]; 
}]; 

[actionSheet showInView:rootViewController.view]; 

Le code ci-dessus utilise BlocksKit, mais vous pouvez le faire aussi en utilisant les propriétés des délégués et d'instance actionSheet.

RotationViewController est juste une sous-classe UIViewController qui implémente

- (void) viewDidLoad { 
    [super viewDidLoad]; 
    self.view.backgroundColor = [UIColor clearColor]; 
    self.view.opaque = NO; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 
Questions connexes