Простой вопрос по UIAlertView и UIAlertViewDelegate - PullRequest
1 голос
/ 07 июля 2011

Надеюсь, это довольно просто.Как вы увидите по моему коду, я просто пытаюсь получить нажатие кнопки 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
    }
  }

Ответы [ 4 ]

2 голосов
/ 07 июля 2011

Вы хотите иметь

if (buttonIndex == 0) {

вместо

if (buttonIndex = 0) {

Первый проверяет равенство, а второй присваивает.

Кроме того, вы хотите иметь

– alertView:clickedButtonAtIndex:

где у вас есть

- doneRedeeming:clickedButtonAtIndex:
1 голос
/ 07 июля 2011

Вам нужно использовать UIAlertViewDelegate методы :

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

не

-(void) doneRedeeming: (UIAlertView *) doneRedeeming clickedButtonAtIndex: (NSInteger)buttonIndex {}
0 голосов
/ 08 июля 2011

@ PengOne ответ правильный: ваша проблема в следующем:

if (buttonIndex = 0) {

Вы сказали

Я знаю, что это не правильно, но я просто хотел убедиться, что утверждение былоtrue на данный момент ...

Но buttonIndex = 0 оценивается как 0, что делает его эквивалентным

if (0)

Код в этом блоке никогда не будет выполнен, независимо отзначение buttonIndex.Если вы действительно хотите сделать это безоговорочно, измените if на if( 1 ) или просто уберите if.

Это было бы тривиально, если бы вы запускали этот код в отладчике.Вы можете подумать, что знаете, что делает ваш код, но если вы не смотрите, как он выполняется, вы этого не сделаете.

0 голосов
/ 07 июля 2011

Используйте метод делегата -alertView:didDismissWithButtonIndex:, чтобы прослушать индекс кнопки отмены

...