代表的几个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 }