警报视图按钮上的不同操作,具体取决于警报视图

时间:2010-01-21 00:51:56

标签: iphone

我的应用中有3个提醒视图。 'wonAlert' 'lostAlert' 'nagAlert'

我实现这个来给他们行动。

 -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

这曾经工作得很好,当我只有'wonAlert'和'lostAlert'时,他们有一个解雇和一个学习更多按钮,将他们带到维基百科, 现在我想要nag警报将它们带到应用程序商店。

我怎样才能这样做,以便上述方法知道水龙头来自哪个警报视图,或类似的东西?

干杯,山姆

4 个答案:

答案 0 :(得分:6)

听起来你已经在变量中获得了UIAlertViews,所以我会使用它们:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (alertView == wonAlert) {
        //DO STUFF
    }
    else if (alertView == lostAlert) {
        //DO OTHER STUFF
    }
    else if (alertView == nagAlert) {
        //OPEN APP STORE
    }
}

多个视图可以使用相同的标记,您可以轻松输错标题或更改标题,忘记更新委托方法。

答案 1 :(得分:1)

在视图控制器头文件中,添加<UIAlertViewDelegate>,以便它同意处理UIAlertView委托方法:

@interface MyViewController : UIViewController <UIAlertViewDelegate> { ... }

在视图控制器的实现中,添加以下委托方法:

- (void) alertView:(UIAlertView *)_actionSheet clickedButtonAtIndex:(NSInteger)_buttonIndex {
    if ([_actionSheet.title isEqualToString:@"titleOfMyAlertView"]) {
        if (_buttonIndex == 0) {
            // do stuff for first button
        } 
        else if (_buttonIndex == 1) {
            // do something for second button
        }
        // etc. if needed
    }
}

_actionSheet.title属性可用于区分警报视图。我的建议是使用NSString常量或NSLocalizedString(),如果您有本地化的字符串表,则标题您的警报视图。

答案 2 :(得分:1)

我在这里回答了类似的问题: Alert with 2 buttons

正确的方法是使用警报的标签属性

创建每个警报后,通过添加:

设置其标记变量
alertName.tag = #; //ex: alertName.tag = 1 

然后,在clickedButtonAtIndex方法中,您需要为每个警报添加一个“if”块,如下面的代码所示:

if(alert.tag == 1)
{
    if (buttonIndex == 0)
    {
        //do stuff
    }
    else
    {
        //do other stuff
    }
}
if(alert.tag == 2)
///...etc

答案 3 :(得分:0)

我会做Alex建议的,但使用AlertView的tag属性来确定使用了哪个AlertView。