同一视图中的多个UIAlertViews

5


我有两个带有确定/取消按钮的UIAlertViews。
我通过以下方法捕获用户响应:

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

我遇到的问题是,当前打开了哪个alertView?
我需要在每个alertView上点击“确定/取消”时执行不同的操作...

使用“.tag”属性进行区分。 - Will Johnston
2个回答

20

您有几个选项:

  • 使用 ivars。创建警报视图时:

    myFirstAlertView = [[UIAlertView alloc] initWith...];
    [myFirstAlertView show];
    // similarly for the other alert view(s).
    

    并且在委托方法中:

    - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
        if (alertView == myFirstAlertView) {
            // do something.
        } else if (alertView == mySecondAlertView) {
            // do something else.
        }
    }
    
    使用UIView的tag属性:
  • #define kFirstAlertViewTag 1
    #define kSecondAlertViewTag 2
    

    UIAlertView *firstAlertView = [[UIAlertView alloc] initWith...];
    firstAlertView.tag = kFirstAlertViewTag;
    [firstAlertView show];
    // similarly for the other alert view(s).
    

    - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
        switch (alertView.tag) {
            case kFirstAlertViewTag:
                // do something;
                break;
            case kSecondAlertViewTag:
                // do something else
                break;
        }
    }
    
  • 创建一个子类继承UIAlertView并添加一个userInfo属性。这样,您就可以为您的警告视图添加标识符。

  • @interface MyAlertView : UIAlertView
    @property (nonatomic) id userInfo;
    @end
    

    myFirstAlertView = [[MyAlertView alloc] initWith...];
    myFirstAlertView.userInfo = firstUserInfo;
    [myFirstAlertView show];
    // similarly for the other alert view(s).
    

    - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
        if (alertView.userInfo == firstUserInfo) {
            // do something.
        } else if (alertView.userInfo == secondUserInfo) {
            // do something else.
        }
    }
    

1

UIAlertViewUIView的子类,因此您可以使用其tag属性进行标识。因此,当您创建警报视图时,请设置其标记值,然后您将能够执行以下操作:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
   if (alertView.tag == kFirstAlertTag){
      // First alert
   }
   if (alertView.tag == kSecondAlertTag){
      // First alert
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接