代表的几个UIAlertViews

目前我有一个类在这里和那里popupUIAlertView 。 目前,同一个class级是这些class级的代表(这是非常合乎逻辑的)。 不幸的是,这些UIAlertView会调用类的相同委托方法。 现在,问题是 – 你怎么知道从哪个alert视图中调用委托方法? 我只是想检查警报视图的标题,但这不是那么优雅。 什么是处理多个UIAlertView的最优雅的方式?

像这样标记UIAlertView

 #define kAlertViewOne 1 #define kAlertViewTwo 2 UIAlertView *alertView1 = [[UIAlertView alloc] init... alertView1.tag = kAlertViewOne; UIAlertView *alertView2 = [[UIAlertView alloc] init... alertView2.tag = kAlertViewTwo; 

然后使用这些标签在委托方法中区分它们:

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if(alertView.tag == kAlertViewOne) { // ... } else if(alertView.tag == kAlertViewTwo) { // ... } } 

仅供参考,如果你只想瞄准iOS 4用户(这是合理的, 现在〜98.5%的客户至less已经安装了iOS 4 ),你应该能够使用块做UIAlertViews的内联处理。

这里是一个Stackoverflow问题解释它:
阻止UIAlertViewDelegate

我尝试过使用Zachary Waldowski的BlocksKit框架。 他的UIAlertView(BlocksKit)API参考看起来非常好。 但是,我试图按照他的说明将BlocksKit框架导入到我的项目中,但不幸的是我无法使其工作。

所以,正如Can BerkGüder所build议的,我现在已经使用了UIAlertView标签。 但是在将来的某个时候,我将尝试使用块(最好是支持ARC的块)!

更容易和更新

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

全做完了!

你可以克服这个难题,通过增强UIAlertView使用块callback来防止你使用标签。 看看这个博客文章,我写了关于这个问题。

我一直认为使用标签是一个黑客。 如果你使用它们,至less为标签号设置一些定义的常量。

相反,我使用这样的属性:

在界面部分:

 @property (nonatomic, weak) UIAlertView *overDueAlertView; @property (nonatomic, weak) UIAlertView *retryPromptAlertView; 

创build警报视图:

 UIAlertView *alert = [[UIAlertView alloc] init... self.overDueAlertView = alert; [alert show]; 

代表方法:

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (alertView == self.overDueAlertView) { // Overdue alert } else if (alertView == self.retryPromptAlertView) { // Retry alert }