2010-08-16 14 views
22

Ich versuche zu rufen und warnt, wenn eine Taste gedrückt wird. ich benutze dies:Erkennung der Schaltfläche klicken mit UIAlertView

-(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, kein problem hier, zwei taste kam, OK und abzubrechen. Jetzt möchte ich erkennen, welche Taste gedrückt wird, die ich verwende:

- (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");  
    } 
} 

jetzt hier ist das Problem. Ich kann nicht erkennen, welche Taste gedrückt wird. Die 2. Alertview wird nicht angezeigt. Ich habe den Code ein paar Mal durchgesehen, da scheint es kein Problem zu geben. kein Fehler/Warnung auch.

+2

Das Anzeigen einer Warnung direkt nach einer anderen Warnung ist wahrscheinlich keine gute Idee - nur ein Tipp. – vakio

Antwort

32

Um die Schaltflächenklicks zu erkennen, muss der Alarmansicht ein Delegierter, z.

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"add button pressed" 
               message:@"Add to record" 
               delegate:self // <------ 
             cancelButtonTitle:@"Cancel" 
             otherButtonTitles:@"OK", nil]; 
+2

+1: Was ich schon halb geschrieben habe. Ich würde auch erwähnen, dass der View-Controller das 'UIAlertViewDelegate' implementieren muss (obwohl ich glaube, dass es eine Warnung gibt, wenn dies nicht der Fall ist.) – sdolan

7

Der ButtonIndex von 0 ist die Abbrechen-Schaltfläche. Ich würde empfehlen, mit:

- (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];   
} 
} 
+2

Oder besser,' if (buttonIndex == alertView.cancelButtonIndex) ... ' – mojuba

1

Wenn Sie Ihren Code lieber sauberer zu sein und keine Abhängigkeit von Delegierten, sollten Sie die Blöcke Implementierung von UIAlertView versuchen:

https://github.com/steipete/PSAlertView

Blöcke nur auf iOS unterstützt werden 4+ Geräte.

13

Dies ist Ihr Code, den ich verwendet habe und fügte auch meinen Code hinzu. **

-(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];  
} 

Nun, wenn Sie Taste auf Alarm drücken, wird es nennen clickedButtonAtIndex aber es sollte eine Kennung für jeden Alarm. Also Tag hinzufügen und dann

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex** 

{ 

// the user clicked one of the OK/Cancel buttons 
if(alert.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");  
} 
} 
} 

Ich hoffe, es hilft.

2

Ich fühle mich, wenn Sie eine neue Warnung Ansicht auf die Schaltfläche Click-Ereignis einer bestehenden Alarmansicht zeigen wollen, wäre es besser,

- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 

} 

Delegatmethode verwenden anstelle von

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 

} 
2
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 { 

} 
}