当多个警报视图出现在同一个视图控制器中时,有没有办法错开?
Is there a way to stagger when multiple Alert Views show up in the same View Controller?
所以我在同一个视图控制器中有两个不同的 UIAlertView,并且可以同时触发两个警报。当两个警报都被触发时,两个警报会同时弹出,警报会叠加在一起。有没有办法错开警报,以便当第一个警报出现时,第二个警报不会弹出,直到用户解除第一个警报?对于我的代码,这是我使用的格式
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"ERROR!"
message:@"Error message here!"
delegate:self
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
为什么不创建一个 class 级别变量来指示 alertView 已打开。然后在打开一个之前检查该变量,如果已设置,则不会弹出第二个。相反,您可以让它设置另一个变量,指示应该弹出第二个框。然后在 - alertView:clickedButtonAtIndex: 方法中,如果设置了第二个变量,则可以弹出第二个。
尝试以下操作:
创建两个属性
@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];
}
希望对您有所帮助:)
我想我来晚了,但仍然发帖,因为它可能对寻找它的人有用。
我已经为 UIAlertAction 创建了一个 AQAlertAction 子类。您可以将它用于惊人的警报,用法与您使用 UIAlertAction 相同。您需要做的就是为此导入 AQMutiAlertFramework in your project or you can include class also (Please refer Sample project)。在内部,它使用二进制信号量来错开警报,直到用户处理与显示的当前警报相关联的操作。让我知道它是否适合你。
所以我在同一个视图控制器中有两个不同的 UIAlertView,并且可以同时触发两个警报。当两个警报都被触发时,两个警报会同时弹出,警报会叠加在一起。有没有办法错开警报,以便当第一个警报出现时,第二个警报不会弹出,直到用户解除第一个警报?对于我的代码,这是我使用的格式
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"ERROR!"
message:@"Error message here!"
delegate:self
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
为什么不创建一个 class 级别变量来指示 alertView 已打开。然后在打开一个之前检查该变量,如果已设置,则不会弹出第二个。相反,您可以让它设置另一个变量,指示应该弹出第二个框。然后在 - alertView:clickedButtonAtIndex: 方法中,如果设置了第二个变量,则可以弹出第二个。
尝试以下操作:
创建两个属性
@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];
}
希望对您有所帮助:)
我想我来晚了,但仍然发帖,因为它可能对寻找它的人有用。
我已经为 UIAlertAction 创建了一个 AQAlertAction 子类。您可以将它用于惊人的警报,用法与您使用 UIAlertAction 相同。您需要做的就是为此导入 AQMutiAlertFramework in your project or you can include class also (Please refer Sample project)。在内部,它使用二进制信号量来错开警报,直到用户处理与显示的当前警报相关联的操作。让我知道它是否适合你。