問題は、2 つのアラートを作成して表示すると、2 番目のアラートが最初のアラートを上書きし、閉じた後に最初に表示されることです。とてもきれいではありません。
NSOperationQueue でキュー アラートを作成しようとしています。いくつかのアラートを追加すると、クローズするシーケンスが表示されます。しかし、私はそうすることができないので、前のものを待って、順次実行される操作を追加することになります。それらは並行して実行されます。
AlertOperation.h
#import <Foundation/Foundation.h>
@interface AlertOperation : NSOperation<UIAlertViewDelegate>
@property (nonatomic,assign) BOOL isFinishedAlert;
- (AlertOperation *)initWithAlert:(UIAlertView *)alert;
@end
AlertOperation.m
#import "AlertOperation.h"
@interface AlertOperation()
{
UIAlertView *_alert;
}
@end
@implementation AlertOperation
@synthesize isFinishedAlert = _isFinishedAlert;
- (AlertOperation *)initWithAlert:(UIAlertView *)alert
{
self = [super init];
if (self)
{
_alert = alert;
_alert.delegate = self;
[_alert show];
}
return self;
}
- (void) main
{
_isFinishedAlert = NO;
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (!_isFinishedAlert);
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
_isFinishedAlert = YES;
}
- (BOOL) isConcurrent
{
return NO;
}
@end
ここに実行コードがあります
UIAlertView *u1 = [[UIAlertView alloc] initWithTitle:@""
message:@"Hello i am first alert" delegate:nil
cancelButtonTitle:@"OK" otherButtonTitles:nil];
UIAlertView *u2 = [[UIAlertView alloc] initWithTitle:@""
message:@"Hello i am second alert" delegate:nil
cancelButtonTitle:@"OK" otherButtonTitles:nil];
NSOperation *alertOp1 = [[AlertOperation alloc] initWithAlert:u1];
NSOperation *alertOp2 = [[AlertOperation alloc] initWithAlert:u2];
alertsQueue = [[NSOperationQueue alloc] init];
[alertsQueue setMaxConcurrentOperationCount:1];
[alertsQueue addOperation:alertOp1];
[alertsQueue addOperation:alertOp2];