46 votes

UIActionSheet ne montre pas séparateur sur le dernier élément sur iOS 7 GM

Il pourrait être probablement un bug sur iOS7. Mais le dernier bouton n'est pas séparée de la précédenteUIActionSheet is missing separator on the last button

Comme vous pouvez le voir sur l'image. Ce qui se passe sur les deux Simulateur et de l'appareil à l'aide de iOS7 GM. Tout le monde a le même problème?

UIActionSheet *actionSheet = [[UIActionSheet alloc]
               initWithTitle:@"Title"
               delegate:self
               cancelButtonTitle:nil
               destructiveButtonTitle:nil
               otherButtonTitles:@"First", @"Second", @"Third", @"Fourth", nil];
[actionSheet showInView:self.view];

Comme vous pouvez le voir, le code est assez simple. Aucune idée sur comment résoudre le problème? Ou une tierce partie de la bibliothèque, je peux utiliser à la place de UIActionSheet ?

24voto

Yiding Points 963

Je pense qu’ActionSheet nécessite un bouton Annuler. Vous pouvez donc ajouter le titre du bouton Annuler.

Une autre méthode consiste à: spécifier le paramètre cancelButtonIndex d’actionSheet.

Par exemple, dans votre cas, vous pouvez ajouter un " Annuler " dans otherButtonTitles à l'index 4, puis spécifier l'actionSheet.cancelButtonIndex = 4.

8voto

teebot Points 530

J'ai trouvé un moyen de le faire fonctionner sur iPhone et iPad de la manière la plus simple possible:

  1. Initiez uniquement la feuille UIAction avec un titre
  2. Ajoutez vos boutons
  3. Ajouter enfin un bouton "ANNULER"
  4. définissez CancelButtonIndex sur ce dernier index

Je suppose que le séparateur manquant est dû au fait que le bouton d'annulation n'a pas été reconnu comme un cas séparé lors de l'ajout initial ou via l'init.

6voto

Chris Points 1498

J'ai trouvé que l'ajout d'un bouton d'annulation avec une chaîne vide après l'initialisation fonctionne. Le bouton d'annulation n'apparaît pas et le séparateur apparaît.

 [sheet addButtonWithTitle: @""];
[sheet setCancelButtonIndex: sheet.numberOfButtons - 1];
 

Mais cela ne fonctionne que pour iPad. Sur l'iPhone, un bouton d'annulation vide apparaît, mais j'ai trouvé une solution de contournement pour le faire fonctionner. En plus de ce qui précède, en willPresentActionSheet ajoutez ce code en:

 NSInteger offset = 55;
CGRect superFrame = actionSheet.superview.frame;
superFrame.origin.y += offset;
[actionSheet.superview setFrame: superFrame];

// hide underlay that gets shifted with the superview
[(UIView*)[[actionSheet.superview subviews] objectAtIndex: 0] removeFromSuperview];

// create new underlay
CGRect underlayFrame = CGRectMake(0, -offset, superFrame.size.width, superFrame.size.height);
UIView* underlay = [[UIView alloc] initWithFrame: underlayFrame];
underlay.alpha = 0.0f;
[underlay setBackgroundColor: [UIColor colorWithWhite: 0.0f alpha: 0.4f]];
[actionSheet.superview insertSubview: underlay atIndex: 0];

// simulate fade in
[UIView animateWithDuration: 0.3f animations:^{
    underlay.alpha = 1.0f;
}];
 

Cela abaisse la feuille pour masquer le bouton d'annulation de l'écran

5voto

aha Points 900

Le correctif le plus simple consiste à passer @"" au titre du bouton d’annulation au lieu de nil lors de l’attribution.

 UIActionSheet *actionSheet = [[UIActionSheet alloc]
               initWithTitle:@"Title"
               delegate:self
               cancelButtonTitle:@"" // change is here
               destructiveButtonTitle:nil
               otherButtonTitles:@"First", @"Second", @"Third", @"Fourth", nil];
[actionSheet showInView:self.view];
 

3voto

nesimtunc Points 308
UIActionSheet *asAccounts = [[UIActionSheet alloc]
                            initWithTitle:Localized(@"select_an_account")
                            delegate:self
                            cancelButtonTitle:nil
                            destructiveButtonTitle:nil
                            otherButtonTitles: nil];

for (int i=0; i<[result count]; i++) {
    ACAccount *acct = [result objectAtIndex:i];
    [asAccounts addButtonWithTitle:[acct username]];
    asAccounts.tag = i;
}

[asAccounts addButtonWithTitle:Localized(@"Cancel")];                
asAccounts.cancelButtonIndex = result.count;
[asAccounts showInView:self.view];

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