多个 UIAlertView;每个都有自己的按钮和动作
Posted
技术标签:
【中文标题】多个 UIAlertView;每个都有自己的按钮和动作【英文标题】:Multiple UIAlertView; each with their own buttons and actions 【发布时间】:2012-03-04 08:36:00 【问题描述】:我在 Xcode 4.3 中创建了一个视图,但我不确定如何指定多个 UIAlertView,这些 UIAlertView 有自己的按钮和单独的操作。目前,我的警报有自己的按钮,但操作相同。下面是我的代码。
-(IBAction)altdev
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"titleGoesHere"
message:@"messageGoesHere"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Continue", nil];
[alert show];
-(IBAction)donate
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"titleGoesHere"
message:@"messageGoesHere"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Continue", nil];
[alert show];
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
if (buttonIndex == 1)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite1.com"]];
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
if (buttonIndex == 1)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"examplesite2.com"]];
感谢您的帮助!
【问题讨论】:
【参考方案1】:UIView
有一个有用的属性tag
(这是UIAlertView
的子类)。您可以为每个警报视图设置不同的标签。
更新:
#define TAG_DEV 1
#define TAG_DONATE 2
- (IBAction)altdev
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"titleGoesHere"
message:@"messageGoesHere"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Continue", nil];
alert.tag = TAG_DEV;
[alert show];
- (IBAction)donate
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"titleGoesHere"
message:@"messageGoesHere"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Continue", nil];
alert.tag = TAG_DONATE;
[alert show];
-(void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex
if (alertView.tag == TAG_DEV) // handle the altdev
...
else if (alertView.tag == TAG_DONATE) // handle the donate
【讨论】:
我仍然不明白我是如何整合它的。当我尝试将其放入时,无论我做什么,我都会不断收到 Use of undeclared identifier 错误。如果您能回复我显示的代码和您的编辑,我将不胜感激。谢谢 非常感谢,效果很好。我敢肯定,你可以说我在这方面还没有很好的经验,很高兴有像你这样的人来帮助我们。 嗯,实际上,当用户点击取消按钮时,我遇到了一个问题,即警报没有取消(只是继续执行任一按钮的操作)。有什么见解吗? 我添加了另一个选项,但我喜欢这个,所以增加了它。不要用 0 定义标签,因为这是所有对象的默认标签(当然,除非您需要默认标签)。我假设你现在已经用取消的东西解决了这个问题,但这是因为你仍然需要测试按钮。【参考方案2】:更简单和更新
UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 1;
UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 2;
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
if(alertView.tag == 1)
// first alert...
else
// sec alert...
全部完成!
【讨论】:
【参考方案3】:如果您发现使用委托方法难以区分警报视图,那么您也可以使用 This Category 类为每个 AlertView 使用完成块。
Alert_ActionSheetWithBlocks
例如。
UIAlertView* alert1 = [[UIAlertView alloc] initWithTitle:@"AlertView+Block 1" message:@"WithBlocks" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
[alert1 showWithFinishBlock:^(UIAlertView *alertView, NSInteger buttonIndex) //--AlertView1 Stuff here ];
UIAlertView* alert2 = [[UIAlertView alloc] initWithTitle:@"AlertView+Block 2" message:@"WithBlocks" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
[alert2 showWithFinishBlock:^(UIAlertView *alertView, NSInteger buttonIndex) //--AlertView2 Stuff here ];
我希望这是与标记 + 委托方法相比更简单的方法..
【讨论】:
【参考方案4】:他是对的,但你需要补充一下:
-(void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex
if (alertView.tag == TAG_DEV && buttonIndex == 1) // handle the altdev
...
else if (alertView.tag == TAG_DONATE && buttonIndex == 1) // handle the donate
如果 buttonIndex==1 则您使用的是第一个其他按钮。 0 表示取消。但是什么都不做为0
【讨论】:
【参考方案5】:或者您也可以这样做(检查标题名称),这只是另一种选择......不过请注意标题相同的警报!
-(IBAction)altdev
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"titleOneGoesHere"
message:@"messageGoesHere"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Continue", nil];
[alert show];
-(IBAction)donate
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"titleTwoGoesHere"
message:@"messageGoesHere"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Continue", nil];
[alert show];
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
if (buttonIndex == 1)
if([[alertView title] isEqualToString:@"titleOneGoesHere"])
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite1.com"]];
else
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"examplesite2.com"]];
【讨论】:
以上是关于多个 UIAlertView;每个都有自己的按钮和动作的主要内容,如果未能解决你的问题,请参考以下文章