7
votes

Problèmes de feuille d'action dans iOS 9

Apple a amorcé la feuille d'action dans iOS 8.3 Comment ajoutez-vous une feuille d'action à mon interface utilisateur?

J'ai réalisé que la documentation d'Apple n'est pas très claire sur la manière de créer une feuille d'action avec UIALERTCONTROLLER. Donc, après un petit jouant, je voulais juste partager mon code, car je ne pouvais pas vraiment trouver quoi que ce soit utile sur la pile échange à propos de ce sujet.


0 commentaires

3 Réponses :


5
votes

Voici un extrait du code que j'ai utilisé dans mes applications pour une feuille d'action, juste au cas où quelqu'un avait besoin d'aide à essayer de déterminer comment utiliser uialertController comme une feuille d'action.

UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Action Sheet"
                                                                       message:@"This is an action sheet."
                                                                preferredStyle:UIAlertControllerStyleActionSheet];

        UIAlertAction *button1 = [UIAlertAction actionWithTitle:@"Button Title 1" style:UIAlertActionStyleDefault
                                                            handler:^(UIAlertAction * action) {
                                                                //code to run once button is pressed
                                                            }];
        UIAlertAction *button2 = [UIAlertAction actionWithTitle:@"Button Title 2" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            //code to run once button is pressed
        }];

        [alert addAction:button1];
        [alert addAction:button2];
        [self presentViewController:alert animated:YES completion:nil];


0 commentaires

18
votes

J'ai eu le même problème dans mon application iPhone, avec un uiacersheet code> pour demander à l'utilisateur s'il voulait prendre une photo ou choisir une image de leur galerie.

 Entrez la description de l'image ici p>

Avant IOS 9, le code suivant a fonctionné bien: p> xxx pré>

Cependant, dans IOS 9, tout cela est complètement assombri l'écran et rien n'apparaîtrait. P>

Ouais ... merci apple. p>

La solution consiste à remplacer le code> uacéheet code> avec un uialertController p>. p>. xxx pré>

remarque que si vous ne em> pas em> inclure une option Annuler (une option avec le style uialertagerStylecancel code>), puis la feuille d'action sera apparaissent, mais taper n'importe où à l'extérieur de la feuille d'action ne rejetera pas le menu. p>

Un gotcha: p>

même si nous avons spécifié que nous voulions que nous voulions ce uialertController code> pour avoir le style uialertControlsTyEctionSheaction code>, vous devez définir le titre comme nil code>, plutôt qu'une chaîne vierge, sinon vous obtenez un écart laid. En haut de la fenêtre. p>

 Entrez la description de l'image ici p>

J'ai hâte de voir quel code IOS 9.2 de travail percera parfaitement. . p>

Mise à jour forte> p>

Mon commentaire: " Cependant, dans iOS 9, tous Ceci est complètement assombri l'écran, et rien n'apparaîtrait em> "était légèrement faux. P>

En réalité, j'ouvre mon uiacersheet code> pendant que le clavier à l'écran était visible. Et dans iOS 9, le clavier apparaîtra au-dessus de forte> votre uiacersheet code>, de sorte que vous ne pouvez plus voir votre feuille d'action (!!), mais vous faire Voir que le reste de l'écran est devenu plus sombre. p>

avec uialertController code>, iOS est légèrement plus convivial, car il cache em> le clavier à l'écran avant de tenter d'afficher la feuille d'action au bas de la écran. Exactement pourquoi Apple ne fait pas la même chose avec uacéheets code> est au-delà de moi. P>

(soupir.) P>

Veuillez puis-je revenir à l'aide de Visual Studio, Maintenant ..? P>

Une autre mise à jour forte> p>

Apple a déclaré que les utilisateurs sont maintenant "obsolètes dans iOS 8". P>

Cependant, Si vous souhaitez continuer à les utiliser, sur vos écrans IOS contenant des boîtes de texte, une solution de contournement sur ce bogue, ERRR, problème, consiste à ajouter une ligne de code avant d'afficher votre uacéheet code>: p>: p>

[self.view endEditing:true]; 


4 commentaires

Merci Derek. Je semble être beaucoup traîné sur Stackoverflow lorsque je posterai des réponses utiles comme celle-ci, alors c'est agréable d'obtenir de bons commentaires pour une fois !!


Hé mike pas un problème! J'ai une question qui n'est pas liée à ce fil du tout, mais savez-vous s'il est possible de construire une application où vous pouvez déverrouiller votre porte de voiture par Bluetooth? Je ne trouve rien à ce sujet et n'est probablement pas possible, mais je pensais que je vous demanderais.


@Derek: Désolé, je n'ai absolument aucune idée. Mais je serais surpris si c'était possible (d'un point de vue de sécurité, si rien d'autre).


Merci pour la réponse Mike. Je pensais la même chose, mais pensé à vérifier. Merci!



1
votes

Dans iOS 9 et pour iPad, j'ai dû ajouter des changements importants. Peut-être que quelqu'un à l'avenir pourrait avoir besoin de cela.

    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Server"
                                                                   message:@"Choose server to point to"
                                                            preferredStyle:UIAlertControllerStyleActionSheet];
    UIAlertAction *button1 = [UIAlertAction actionWithTitle:@"Development" style:UIAlertActionStyleDefault
                                                    handler:^(UIAlertAction * action) {
                                                        //code to run once button is pressed
                                                    }];
    UIAlertAction *button2 = [UIAlertAction actionWithTitle:@"Production" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        //code to run once button is pressed
    }];
    [alert addAction:button1];
    [alert addAction:button2];
    UIPopoverPresentationController *popPresenter = [alert popoverPresentationController];
    popPresenter.sourceView = self.view;
    //To present the actionsheet the bottom of screen
    popPresenter.sourceRect = CGRectMake(self.createBtn.frame.origin.x, self.view.frame.size.height, self.createBtn.frame.size.width, self.createBtn.frame.size.height);
    alert.modalPresentationStyle = UIModalPresentationPopover;
    [self presentViewController:alert animated:YES completion:nil];


0 commentaires