J'ai besoin de faire J'ai essayé de faire Peut-être comment corriger ce code ou toute autre suggestion? Merci p> p> uialertview code> blocage. Parce que j'ai la fonction et que j'ai besoin de retourner
uialertview code> choix. Mais le problème est que, après
uialertview code> est affiché, mon code de fonction s'exécute plus loin, je ne peux donc pas attraper
uialertview code> choix (je peux le faire dans des méthodes de délégation, mais je dois retourner Résultat de la fonction).
uialertview code> Blocage avec
NSCondition code>. Mais le code ne fonctionne pas. P>
5 Réponses :
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 P>
Merci. J'ai redessiné ma logique de fonction.
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. P>
puis sur le délégué, vous faites un = 1 lorsque vous avez la réponse p>
et Avant que quelqu'un dit qu'il n'y ait pas de bibliothèques en cacao: p> 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. P> espère qu'il aide.
J'ai utilisé le second dans mon projet et cela a fonctionné. P> p>
OP était après une solution pour iOS, que je ne pense pas que c'était.
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: voici la méthode statique pour un oui / Aucune requête: p> 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;
}
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. 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];
}
Merci @joseph. Ceci est totalement fou toute la vision de l'alerte et des délégués à la folie. Merci pour cette solution.
Utilisez Uialertview avec des blocs de Joseph et ajoutez un sémaphore à celui-ci.
Déclarez un sémaphore global et signaler le sémaphore dans le gestionnaire de bloc p> après avoir appelé l'affichagewithhandler Ajouter une boucle d'attente à l'aide du sémaphore < / p> Votre valeur de délai d'attente réelle peut être différente selon vos besoins. p> p>