2011-03-05 49 views
1

我在uialert視圖中出現了一個奇怪的問題。UIALERTVIEW目標問題c

我有幾個警報是在我的.m文件在我的.h文件中

UIAlertView *changepwalert; //change password alert. 
UIAlertView *delallalert; //delete selected transactions. 
UIAlertView *logout; //logout alert. 
UIAlertView *closingbalancealert; //closing balance alert. 
UIAlertView *totalreportalert; //total report alert. 
UIAlertView *ordercashalert; //order cash alert. 
UIAlertView *unlockingalert; //unlocking alert. 
UIAlertView *receivecashalert; 

成員變量didDismissWithButtonIndex委託方法我有以下。

if(alertView==unlockingalert && buttonIndex==0) 
{ 
    //code 
} 

else if(alertView==ordercashalert && buttonIndex==0) 
{ 
    //code 

} 
else if(alertView==receivecashalert && buttonIndex==0) 
{ 
    //code 
} 
else if (alertView==logout && buttonIndex == 0) 
{ 
    //code 
} 
else if(alertView==closingbalancealert && buttonIndex==0) 
{ 
     //code 
} 
else if (alertView==changepwalert && buttonIndex==0) 
{ 
    //code 
} 
else if(alertView==delallalert && buttonIndex==0) 
{ 
    //code 
} 

這裏是我如何初始化UIAlertView中

ordercashalert = [[UIAlertView alloc] initWithTitle:nil message:@"Enter Password\n\n\n\n\n\n" delegate:self 
            cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel",nil]; 


logout = [[UIAlertView alloc] initWithTitle:@"Logout" message:@"Are You Sure?" delegate:self cancelButtonTitle:@"YES" otherButtonTitles:@"NO",nil]; 
[logout show]; 
[logout release]; 

當我點擊它運行的委託方法註銷按鈕的樣本,但它警告匹配ordercashalert或receivecashalert.i我不知道爲什麼。它應該實際上與註銷警報匹配。我處於交付產品的最後階段,突然間我有這個bug。有人能幫助我嗎。

+0

把代碼放在初始化它們的地方...... – 2011-03-05 05:21:56

+0

@mehta我編輯了我的文章,我不認爲我們可以把代碼放在我正在初始化uialertview,因爲我們不知道用戶將點擊哪個按鈕索引。還有什麼想法? – Rajashekar 2011-03-05 05:39:34

回答

5

我建議你使用標記和枚舉技巧。首先 - 所有可能的警報創建枚舉:

enum { 
    RSChangePasswordAlertTag, 
    RSDeleteAlertTag, 
    .... 
    ReceiveCashAlertTag 
}; 

然後創建警報後,就分配適當的標籤給它

UIAlertView *myAlert = [[[UIAlertView alloc] initWithTitle:....] autorelease]; 
[myAlert setTag:RSDeleteAlertTag]; 
[myAlert show]; 

然後在委託方法使用switch語句alertView的標籤:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSUInteger)buttonIndex { 
    switch (alertView.tag) { 
     case RSPasswordAlertTag: { 
      // Do password alert thing 
      break; 
     } 
     case RSDeleteAlertTag: { 
      // do delete thing 
      break; 
     } 
     .... // here be other cases 
    } 
} 

這樣你就只會比較整數而不是指針,而且你的代碼會比較乾淨,少一些實例變量。

+0

感謝哥們,我會試試這個,明天讓你知道。 – Rajashekar 2011-03-05 06:39:38

+0

感謝您的提示好友似乎正在工作 – Rajashekar 2011-03-06 06:49:16