我在一个视图中有多个警报视图,我使用此代码来检测按下了哪个按钮:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if ([title isEqualToString:@"OK"]) {
//for one alert view
[passCode becomeFirstResponder];
} else if ([title isEqualToString:@" OK "]) {
//for another alert view, had to change "OK" to " OK "
[passCodeConfirm becomeFirstResponder];
}
}
现在,由于一个视图中有多个警报视图可以执行不同的操作,因此我必须诱使用户认为“确定”和“确定”是一回事。它工作和看起来很好,但它感觉有点混乱。当然还有另一种方法可以做到这一点,例如将其特定于警报视图,然后使其特定于另一个。你知道我会怎么做吗?谢谢!
答案 0 :(得分:55)
为单独的UIAlertView设置唯一的标记,并在其委托方法中识别和访问,这将更具技术性。
例如,
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Message" message:@"Are You Sure you want to Update?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok",nil];
[alert setTag:1];
[alert show];
[alert release];
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(alertView.tag == 1)
{
// set your logic
}
}
答案 1 :(得分:4)
使用tag属性唯一标识您创建的每个alertview。
喜欢这个
myAlertView.tag = 1
然后在clickedButtonAtIndex委托方法中检查使用此标记属性单击了哪个alertview的按钮,
if(alertView.tag==1)
答案 2 :(得分:2)
我不会使用标题来区分按钮。当您的应用程序已本地化或您决定更改按钮标题时,您会遇到问题,但忘记在任何地方更新它们。使用按钮索引,或者除了取消按钮只有一个按钮,请使用cancelButtonIndex
的{{1}}属性。
要区分多个警报视图,您可以使用他们的UIAlertView
属性。
答案 3 :(得分:2)
在您的视图中,为每个警报视图添加一个属性。
UIAlertView *myAlertType1;
UIAlertView *myAlertType2;
@property (nonatomic, retain) UIAlertView *myAlertType1;
@property (nonatomic, retain) UIAlertView *myAlertType2;
使用这些属性
创建提醒self.myAlertType1 = [[[UIAlertView alloc] initWithTitle: ... etc] autorelease];
[self.myAlertType1 show];
然后在你的委托方法中:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (alertView == myAlertType1) {
// check the button types and add behaviour for this type of alert
} else if (alertView == myAlertType2 {
// check the button types and add behaviour for the second type of alert
}
}
编辑:虽然上述方法有效,但iApple建议使用该标签似乎更清晰/更简单。
答案 4 :(得分:1)
//in your .h file
UIAlertView* alert1;
UIAlertView* alert2;
//in your .m file
// when you are showing your alerts, use
[alert1 show]; //or
[alert2 show];
//and just check your alertview in the below method
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(alertView == alert1)
{
//check its buttons
}
else //check other alert's btns
}