UIAlertView not responding to UIAlertViewDelegate

2.8k views Asked by At

I'm using logos for iPhone (MobileSubstrate addons), with a .h file for my

@interface MyClass : NSObject <UIAlertViewDelegate>

and the

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

is in the .m, but nothing is working, when tapping the buttons on the alert, it doesn't invoke what I have set for each buttonIndex.

Thanks.

Edit: Here's what I've got;

#import "Tweak.h"

%hook ASApplicationPageHeaderView

- (void)_showPurchaseConfirmation {
    UIAlertView *alert = [[UIAlertView alloc] init];
    [alert setTitle:@"title"];
    [alert setMessage:@"message"];
    [alert setDelegate:self];
    [alert addButtonWithTitle:@"button 1"];
    [alert addButtonWithTitle:@"continue"];
    [alert show];
    [alert release];
}

- (void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex {    
    if (buttonIndex == 0) {  //also tried (UIAlertView *)alertView
        UIAlertView *lol = [[UIAlertView alloc] init];
        [lol setTitle:@"button 1"];
        [lol setMessage:@"button 1"];
        [lol setDelegate:self];
        [lol addButtonWithTitle:@"lol"];
        [lol show];
        [lol release];
    } else {
        %orig;
    }
}

%end
3

There are 3 answers

0
Inam Abbas On

Define your alert within that class and declare the alert delegate to self hope it start working to you

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert View "
                      " 
                                                message:@"Would you like to do something?"
                                               delegate:self 
                                      cancelButtonTitle:@"Cancel"
                                      otherButtonTitles:@"Button1", @"Button2", nil];
[alert show];
[alert release];
2
John Parker On

You'll most likely need to register your class as the delegate at some point using something along the lines of:

 [yourAlertViewObject setDelegate:self];

As the UIAlertViewDelegate Protocol Reference docs say (emphasis mine):

If you add your own buttons or customize the behavior of an alert view, implement a delegate conforming to this protocol to handle the corresponding delegate messages. Use the delegate property of an alert view to specify one of your application objects as the delegate.

0
gallileo On

You just need to put %new in front of the alertView delegate:

 %new
 -(void) alertView:...