关于UIAlertView和UIAlertViewDelegate的简单问题



我希望这是非常直接的。正如你将看到我的代码,我只是试图得到一个UIAlertView按钮按下弹出我回到根视图。

我没有得到任何编译错误或警告,当我运行应用程序时,"RedeemCoupon"方法在IBAction中被调用,并且UIAlertView应该弹出,但它似乎没有"doneRedeeming"方法被调用-我没有看到任何来自NSLog(是的,我知道我正在设置buttonIndex为0 -一旦我得到这个工作我会修复它)。所以,基本上它不起作用。我点击"取消"按钮,警报就消失了。

顺便说一下,我不确定这是否重要,但这个"RedeemCouponViewController"视图是堆栈上的第4号,它是通过使用presentModalViewController在前一个视图中添加的。

如果需要的话,我愿意接受其他的方法——欢迎所有的建议!

提前感谢!

// 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
    }
  }

if (buttonIndex == 0) {

代替

if (buttonIndex = 0) {

前者检查是否相等,后者赋值。

同样,你想要

– alertView:clickedButtonAtIndex:

- doneRedeeming:clickedButtonAtIndex:

您需要使用UIAlertViewDelegate方法:

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

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

使用委托方法-alertView:didDismissWithButtonIndex:侦听您的取消按钮索引

@PengOne的答案是正确的:你的问题是:

if (buttonIndex = 0) {

你说

我知道这是不对的,但我只是我想确认一下这份声明

buttonIndex = 00,等于

if (0)

无论buttonIndex的值如何,该块中的代码都将永远不会执行。如果你真的想无条件地执行,把If改成if( 1 ),或者直接把If去掉。

如果您在调试器中运行这段代码,这将是微不足道的。你可能认为你知道你的代码在做什么,但是如果你不观察它的运行,你就什么都不知道了。

最新更新