我有两个警报按钮,我无法获得第二个按钮转到另一个URL,它只是转到与第一个按钮相同的URL。第二个警报弹出没问题,第二个警报上的“访问”按钮与第一个警报相同。
-(IBAction)creditBtn: (id) sender{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Credits"
message:@"Message
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Visit", nil];
[alert show];
[alert release];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if(buttonIndex==1) {
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString:@"http://website1.com"]];
}
}
-(IBAction)sendBtn: (id) sender2{
UIAlertView *alert2 = [[UIAlertView alloc]
initWithTitle:@"Send Me Your Feedback"
message:@"Message"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Visit", nil];
[alert2 show];
[alert2 release];
}
- (void)alertView2:(UIAlertView *)alertView2 clickedButtonAtIndex:(NSInteger)buttonIndex{
// resign the shake FirstResponder, no keyboard if not
//[self resignFirstResponder];
// making the otherButtonTitles button in the alert open a URL
if(buttonIndex==0){
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://website2.com"]];
}
}
答案 0 :(得分:1)
您的问题在于alertView2
委托方法。委托是一种在发生事件时自动调用的方法。在这种情况下,当UIAlertView关闭时,会自动调用delagate methood:- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
。所以你的问题是alert2
也在调用与第一个警报相同的委托方法。
但是有一个非常简单的解决方法。为了解决这个问题,我们为每个alertView添加了一个标记。然后在委托方法中,我们检查标记以查看它是哪个警报。以下是如何做到这一点:
//Set up your first alertView like normal:
-(IBAction)creditBtn: (id) sender{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Credits"
message:@"Message"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Visit", nil];
alert.tag = 0; //Here is that tag
[alert show];
[alert release]; //Although this is unnecessary if you are using iOS 5 & ARC
}
我唯一改变的是将第一个警报标记为警报0.这意味着只要每个警报都有不同的标记,我们就可以区分它们。
然后像你一样设置你的第二个alertView:
-(IBAction)sendBtn:(id)sender{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Send Me Your Feedback"
message:@"Message"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Visit", nil];
alert.tag = 1; //Notice I used a different tag number
[alert show];
[alert release];
}
注意我同时命名了alertViews alert
。我没有必要给他们命名alert
& alert2
因为这个东西叫变量范围。变量范围意味着变量在一定时间内存活,然后死亡。所以在你的情况下,因为你在一个方法中创建了变量UIAlertView *alert
,在该方法结束时,该变量就会死掉。有关详细信息,请查看:Article on Variable Scope
最后,响应alertView的委托方法被关闭:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if(alert.tag == 0 && buttonIndex == 1) //Show credits
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://website1.com"]];
else if(alert.tag == 1 && buttonIndex == 1) //Send feedback
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://website2.com"]];
}
这就是它的全部内容。如果您需要更多帮助,请在评论中告诉我。