当多个警报视图出现在同一个View Controller中时,有没有办法交错?

时间:2015-04-23 18:35:53

标签: ios objective-c xcode6 uialertview

所以我在同一个视图控制器中有两个不同的UIAlertView,可以同时触发这两个警报。当两个警报都被触发时,两个警报会同时弹出,警报会相互叠加。有没有办法错开警报,以便在第一个警报出现时,第二个警报不会弹出,直到用户解除第一个警报?对于我的代码,这是我正在使用的格式

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"ERROR!"
                                                    message:@"Error message here!"
                                                   delegate:self
                                          cancelButtonTitle:@"Ok"
                                          otherButtonTitles:nil];
[alertView show];

3 个答案:

答案 0 :(得分:1)

尝试以下方法:

创建两个属性

@property (weak, nonatomic) UIAlertView *visibleAlertView;
@property (strong, nonatomic) UIAlertView *pendingAlertView;

每当您想要从代码中提出警报视图时进行检查

UIAlertView *newAlertView = [[UIAlertView alloc] init...
if (self.visibleAlertView) {
    self.pendingAlertView = newAlertView;
} else {
    self.visibleAlertView = newAlertView;
    [newAlertView show];
}

最后:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    if (self.pendingAlertView) {
        UIAlertView *newAlertView = self.pendingAlertView;
        self.pendingAlertView = nil;
        self.visibleAlertView = newAlertView;
        [newAlertView show];
    }
}

希望有所帮助:)

修改

您甚至可以堆叠待处理的警报视图:

@property (strong, nonatomic) NSMutableArray *pendingAlertViews;
...
self.pendingAlertViews = [NSMutableArray array];
在提交警报视图之前

UIAlertView *newAlertView = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
if (self.visibleAlertView) {
    [self.pendingAlertViews addObject:newAlertView];
} else {
    self.visibleAlertView = newAlertView;
    [newAlertView show];
}

并解雇:

if (self.pendingAlertViews.count > 0) {
    UIAlertView *av = self.pendingAlertViews.firstObject;
    [self.pendingAlertViews removeObjectAtIndex:0];
    self.visibleAlertView = av;
    [av show];
}

希望它有所帮助:)

答案 1 :(得分:0)

为什么不制作表示alertView已打开的类级别变量。然后在打开之前检查该变量,如果设置了变量,则不要弹出第二个变量。相反,您可以设置另一个变量,指示应弹出第二个框。然后在 - alertView:clickedButtonAtIndex:方法中,如果设置了第二个变量,你可以弹出第二个。

答案 2 :(得分:0)

我认为我已经很晚了,但仍然发布,因为它可能对寻找此事的人有用。

我为UIAlertAction创建了一个AQAlertAction子类。您可以将它用于交错警报,其用法与使用UIAlertAction相同。您需要做的就是在项目中导入AQMutiAlertFramework,或者也可以包含类(请参考Sample project)。在内部它使用二进制信号量来交错警报,直到用户处理与当前警报相关联的操作。让我知道它是否适合你。