开发者

Simple question on UIAlertView and UIAlertViewDelegate

开发者 https://www.devze.com 2023-03-18 23:01 出处:网络
I hope this is pretty straight-forward.As you\'ll see by my code, I\'m simply trying to get a UIAlertView button-press to pop me back to the root view.

I hope this is pretty straight-forward. As you'll see by my code, I'm simply trying to get a UIAlertView button-press to pop me back to the root view.

I don't get any compile errors or warnings, and when I run the app, the "RedeemCoupon" method is called in the IBAction, and the UIAlertView pops up as it should, but it doesn't seem the "doneRedeeming"开发者_如何学Go method gets called at all - I don't see anything from NSLog (yes I'm aware that I am setting buttonIndex to 0 - once I get this working I'll fix it). So, basically it doesn't work. I click the "cancel" button and the alert just goes away.

By the way I'm not sure if this matters, but this "RedeemCouponViewController" view is number 4 on the stack, and it was added by use of presentModalViewController in the previous view.

I'm open to other ways of doing this if needed - all suggestions welcome!

Thanks in advance!

// RedeemCouponViewController.h

@interface RedeemCouponViewController : UIViewController <UIAlertViewDelegate> {

//  RedeemCouponViewController.m

- (IBAction) redeemYes: (UIButton*) sender {    
    CouponRedeem *redeem = [[CouponDatabase database] couponRedeem:_uniqueId];
    [redeem release];

    UIAlertView *doneRedeeming = [[UIAlertView alloc]initWithTitle:@"Coupon Redeemed!"
                                                           message:@"Thanks for shopping!" 
                                                          delegate:self 
                                                 cancelButtonTitle:@"Back to Main Menu" 
                                                 otherButtonTitles:nil];
    [doneRedeeming show];
    [doneRedeeming release];
  }

-(void) doneRedeeming: (UIAlertView *) doneRedeeming clickedButtonAtIndex: (NSInteger)buttonIndex {
    if (buttonIndex = 0) {
       NSLog(@"doneRedeemed method called");
       [self.navigationController popToRootViewControllerAnimated:YES];
    } else {
       //do nothing
    }
  }


You want to have

if (buttonIndex == 0) {

in place of

if (buttonIndex = 0) {

The former checks for equality whereas the latter assigns.

Also, you want to have

– alertView:clickedButtonAtIndex:

where you have

- doneRedeeming:clickedButtonAtIndex:


You need to use UIAlertViewDelegate methods:

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

not

-(void) doneRedeeming: (UIAlertView *) doneRedeeming clickedButtonAtIndex: (NSInteger)buttonIndex {}


Use the delegate method -alertView:didDismissWithButtonIndex: to listen for your cancel button index


@PengOne's answer is correct: your problem is this:

if (buttonIndex = 0) {

You said

I know it's not correct, but I just wanted to be sure the statement was true for now...

But buttonIndex = 0 evaluates to 0, making it equivalent to

if (0)

The code within that block will never execute, regardless of the value of buttonIndex. If you really want to do it unconditionally, change the if to if( 1 ), or just take the if out.

This would have been trivial to spot if you ran this code in the debugger. You might think you know what your code is doing, but if you don't watch it run, you don't.

0

精彩评论

暂无评论...
验证码 换一张
取 消