J'essaie d'appeler et d'alerter quand un bouton est enfoncé. J'utilise ceci:
-(IBAction)Add {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"add button pressed"
message:@"Add to record"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil ];
[alert show];
[alert release];
}
oK, pas de problème ici, deux boutons sont venus, ok et annuler. Maintenant, je veux détecter quel bouton est enfoncé que j'utilise:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
// the user clicked one of the OK/Cancel buttons
if (buttonIndex == 0)
{
//just to show its working, i call another alert view
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well"
message:@"no error" delegate:nil
cancelButtonTitle:@"IWORKS"
otherButtonTitles:@"NO PRB", nil];
[alert show];
[alert release];
}
else
{
NSLog(@"cancel");
}
}
maintenant voici le problème. Je ne peux pas détecter quel bouton est enfoncé; La 2nd alertview ne montre pas. J'ai choisi le code plusieurs fois, il ne semble y avoir aucun problème. Pas d'erreur/avertissement aussi.
Pour détecter le bouton, cliquez sur la vue d'alerte doit avoir un fichier associé délégué, par exemple.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"add button pressed"
message:@"Add to record"
delegate:self // <------
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
Ceci est votre code que j'ai utilisé et ajouté de mon code aussi. Amateur
-(IBAction) Add
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"add button pressed"
message:@"Add to record"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
alert.tag=101;//add tag to alert
[alert show];
[alert release];
}
Maintenant, lorsque vous appuyez sur le bouton sur l'alerte, il appellera clickedbuttonatidex mais un identifiant doit être identifié pour chaque alerte. Alors ajoutez une étiquette puis
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex**
{
// the user clicked one of the OK/Cancel buttons
if(alertView.tag == 101) // check alert by tag
{
if (buttonIndex == 0)
{
//just to show its working, i call another alert view
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well"
message:@"no error"
delegate:nil
cancelButtonTitle:@"IWORKS"
otherButtonTitles:@"NO PRB", nil];
[alert show];
[alert release];
}
else
{
NSLog(@"cancel");
}
}
}
J'espère que ça aide.
Le bouton Boutonindex de 0 est le bouton Annuler. Je recommanderais d'utiliser:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0)
{
NSLog(@"cancel");
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"OK works" message:@"no error" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
1)
.h file
@interface MyClassViewController:<UIAlertViewDelegate>
2)
.m file
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Note"
message:@"some message"
delegate:self // must be self to call clickedButtonAtIndex
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
3)
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == [alertView cancelButtonIndex]) {
NSLog(@"The cancel button was clicked from alertView");
}
else {
}
}
Je me sens si vous souhaitez montrer une nouvelle vue d'alerte sur le bouton Cliquez sur un événement d'une vue d'alerte existante, il serait préférable d'utiliser
- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
}
méthode déléguée au lieu de
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}
Si vous préférez que votre code soit plus propre et sans dépendance à la déléguée, vous devriez essayer la mise en œuvre des blocs de Uialertview:
https://github.com/steipète/psalertview
Les blocs ne sont toutefois pris en charge que sur les appareils iOS 4+.