多个UIAlertViews在同一视图中

我有两个带有ok / cancel按钮的UIAlertViews。
我通过以下方式捕获用户响应:

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

我遇到的问题是, 哪个alertView目前正在打开?
在每个单击确定/取消时,我有不同的操作…

你有几个选择:

  • 使用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. } } 
  • 使用UIViewtag属性:

     #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. } } 

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

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