UIALERTVIEW目标问题c

时间:2011-03-05 05:18:38

标签: iphone objective-c uialertview

我对uialert观点有一个奇怪的问题。

我的.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;

在我的.m文件中,我有以下forDismissWithButtonIndex委托方法。

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匹配。我不知道为什么。它实际上应该与注销警报匹配。我正处于交付产品的最后阶段,突然间我有这个错误。有人可以帮助我。

1 个答案:

答案 0 :(得分: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
    }
}

这样你只需要比较整数而不是指针,你的代码将更清晰,实例变量更少。