2011-07-06 58 views
1

我希望這是非常簡單的。正如你通過我的代碼所看到的,我只是試圖獲得一個UIAlertView按鈕 - 按下將我彈回到根視圖。簡單的問題在UIAlertView和UIAlertViewDelegate

我沒有收到任何編譯錯誤或警告,當我運行應用程序時,在IBAction中調用了「RedeemCoupon」方法,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 
    } 
    } 

回答

2

你想擁有

if (buttonIndex == 0) { 

代替

if (buttonIndex = 0) { 

平等而後者受讓前者檢查。

而且,你想擁有

– alertView:clickedButtonAtIndex: 

,你必須

- doneRedeeming:clickedButtonAtIndex: 
+0

是的,謝謝 - 我知道這是不正確的,但我只是想確保該聲明對於現在來說是正確的,以防萬一由於某些原因「取消」不是「0」。感謝您的提示,但! – truthsmiles

+0

作爲一個側面說明,通過'(0 == buttonIndex)'這種方式編寫比較通常更安全,如果您意外地分配而不是比較,並且避免了潛在的邏輯錯誤,程序將無法編譯。 –

0

使用委託方法-alertView:didDismissWithButtonIndex:聽你的取消按鈕指數

+0

嘗試這樣做:「 - (無效)alertView:(UIAlertView中*)alertView didDismissWithButtonIndex:(NSInteger的)buttonIndex { \t如果(buttonIndex = 0){ \t \t的NSLog(@ 「稱爲doneRedeemed方法」); \t \t [self.navigationController popToRootViewControllerAnimated:YES]; \t}其他{ \t \t //什麼也不做 \t} }」仍然沒有工作 truthsmiles

+0

該死的 - 我怎麼張貼代碼? – truthsmiles

+0

if if(buttonIndex = 0)'if if(buttonIndex == 0)'? –

1

您需要使用UIAlertViewDelegatemethods

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

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

試過你的改變(實際上我最初是這樣做的,但它不起作用:-( – truthsmiles

0

@ PengOne的答案是正確的:你的問題是這樣的:

if (buttonIndex = 0) { 

你說

我知道這是不正確的,但我只是 想成爲確定聲明是 現在爲true ...

但是buttonIndex = 0的計算結果爲0,使得它等同於

if (0) 

在該塊內的代碼將不會執行,而不管buttonIndex的值。如果你真的想無條件地做,可以將if改爲if(1),或者只是將if改爲if。

如果您在調試器中運行此代碼,這將是微不足道的。你可能會認爲你知道你的代碼在做什麼,但如果你不看它運行,你就不會。