user2277872
user2277872

Reputation: 2973

How to get custom delegate to work

I am creating a custom delegate UIAlertView's alert:buttonClickedAtIndex: method, but it is not working properly. I am subclassing a UIView, and I have two buttons that are tagged as 0 and 1. This still does not work when I go to check the delegate for my custom view. Here the code that I did.

Custom View

- (void) buttonTouchedWithIdentifier:(NSInteger)identifier
{
if (identifier == 0) {
    [self.delegate alert:self didClickButtonWithTagIdentifier:0];
}
if (identifier == 1) {
    [self.delegate alert:self didClickButtonWithTagIdentifier:1];
}
}

* in my showInViewMethod *
[self.dismissButton addTarget:self action:@selector(buttonTouchedWithIdentifier:) forControlEvents:UIControlEventTouchDown];
[self.continueButton addTarget:self action:@selector(buttonTouchedWithIdentifier:) forControlEvents:UIControlEventTouchDown];

self.dismissButton.tag  = 0;
self.continueButton.tag = 1;



* in my view controller *

nextLevelAlert = [[ARAlert alloc] init];
nextLevelAlert.delegate = self;
[nextLevelAlert showInView:self.view
      withMessage:[NSString stringWithFormat:@"Congratulations, you have completed level %i.\nWould you like to continue?", levelNumber]
  dismissButtonTitle:@"Menu"
 continueButtonTitle:@"Next Level"];

- (void)alert:(ARAlert *)alert didClickButtonWithTagIdentifier:(NSInteger)tagId
{
    if (alert == nextLevelAlert) {
       if (tagId == 0) {
           NSLog(@"User does not want to continue.");
       }
    }
}   

Now, nextLevelAlert has the delegate set to self, and I do have the delegate declared in my view controller's class. Also, when i do the showInView... for nextLevelAlert, it DOES appear, it is recognizing what button is being pressed.

Upvotes: 0

Views: 74

Answers (1)

streem
streem

Reputation: 9144

My guess is your param is not a NSInteger but the button, you should change buttonTouchedWithIdentifier like this :

- (void) buttonTouchedWithIdentifier:(id)sender
{
    UIButton *button = (UIButton*)sender;
    NSLog(@"buttonTouchedWithIdentifier %@",@(button.tag));
    if (button.tag == 0) {
        [self.delegate alert:self didClickButtonWithTagIdentifier:0];
    }
    if (button.tag == 1) {
        [self.delegate alert:self didClickButtonWithTagIdentifier:1];
    }
}

Also when comparing two objects use isEqual: instead of ==

- (void)alert:(ARAlert *)alert didClickButtonWithTagIdentifier:(NSInteger)tagId
{
    if ([alert isEqual:nextLevelAlert]) {
       if (tagId == 0) {
           NSLog(@"User does not want to continue.");
       }
    }
 }   

Upvotes: 2

Related Questions