8
votes

Faire du blocage uialertview

J'ai besoin de faire uialertview blocage. Parce que j'ai la fonction et que j'ai besoin de retourner uialertview choix. Mais le problème est que, après uialertview est affiché, mon code de fonction s'exécute plus loin, je ne peux donc pas attraper uialertview choix (je peux le faire dans des méthodes de délégation, mais je dois retourner Résultat de la fonction).

J'ai essayé de faire uialertview Blocage avec NSCondition . Mais le code ne fonctionne pas. xxx

Peut-être comment corriger ce code ou toute autre suggestion? Merci


0 commentaires

5 Réponses :


8
votes

Il n'y a aucun moyen de réaliser ce que vous voulez. Seulement à travers le délégué. Vous devez redéfinir votre fonction ou refuser à l'aide de UIALERTERVIEW


1 commentaires

Merci. J'ai redessiné ma logique de fonction.



2
votes

Je venais de faire face au même problème. Bien qu'aucune solution, il y a au moins 2 contours de contournement que j'ai pensé.

boucle "solution" Juste après avoir appelé l'UIALERT, vous démarrez une boucle qui recherche la modification d'une variable globale à votre objet (non à l'ensemble du projet, pensez) que la variable est celle que vous avez définie dans le délégué UIALERT qui prend les réponses. Donc, fondamentalement, vous attendez «est un == 1, sinon des vitrages» et boucle dessus.

puis sur le délégué, vous faites un = 1 lorsque vous avez la réponse

et Avant que quelqu'un dit qu'il n'y ait pas de bibliothèques en cacao: xxx

Solution de délégué Au lieu d'avoir le code qui traite de la réponse A, B ou C dans la fonction qui appelle l'alerte, ayez le code dans le délégué lui-même.

espère qu'il aide. J'ai utilisé le second dans mon projet et cela a fonctionné.


1 commentaires

OP était après une solution pour iOS, que je ne pense pas que c'était.



1
votes

Je viens de trouver cette question par accident et même en entrant l'enfer Apple en postant ceci, je proclamais cela comme une preuve de concept: xxx pré>

voici la méthode statique pour un oui / Aucune requête: p> xxx pré>

et enfin la méthode déléguée de gestion du bouton clic et Arrêtez le traitement d'exécution: P>

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    _wasYes = (buttonIndex == 0);
    _isCanceled = YES;
}


0 commentaires

5
votes

Cela ne le fait pas bloquer, mais j'ai écrit une sous-classe pour ajouter une syntaxe de style de bloc qui facilite beaucoup la manipulation de la méthode ButtonClickedAindex sans avoir à faire un délégué et tout un tas d'affirmations si vous avez plusieurs états uialertviews dans une classe. xxx pré>

puis pour appeler ici est un exemple de code. L'autre partie froide est que, comme un bloc ferme autour des variables locales, je peux avoir accès à tout l'état qui existait à l'époque où je montrent l'Uialertview. À l'aide de l'approche traditionnelle des délégués, vous devrez stocker tout cet état temporaire en variables de niveau de classe pour y avoir accès dans l'appel à BoutonClickedAindex dans le délégué. C'est tellement plus propre. P>

{
    NSString *value = @"some random value";
    UIAlertViewBlock *b = [[UIAlertViewBlock alloc] initWithTitle:@"Title" message:@"Message" block:^(NSInteger buttonIndex)
        {
            if (buttonIndex == 0)
                NSLog(@"%@", [value stringByAppendingString: @" Cancel pressed"]);
            else if (buttonIndex == 1)
                NSLog(@"Other pressed");
            else
                NSLog(@"Something else pressed");
        }
        cancelButtonTitle:@"Cancel" otherButtonTitles:@"Other", nil];

    [b show];
}


1 commentaires

Merci @joseph. Ceci est totalement fou toute la vision de l'alerte et des délégués à la folie. Merci pour cette solution.



1
votes

Utilisez Uialertview avec des blocs de Joseph et ajoutez un sémaphore à celui-ci. Déclarez un sémaphore global xxx

et signaler le sémaphore dans le gestionnaire de bloc xxx

après avoir appelé l'affichagewithhandler Ajouter une boucle d'attente à l'aide du sémaphore < / p> xxx

Votre valeur de délai d'attente réelle peut être différente selon vos besoins.


0 commentaires