перед началом операции в UIView добавьте диалоговое окно предупреждение таблицы действий/пользовательского интерфейса
В приложении, которое я разрабатываю, у меня есть представление, которое сначала появляется всякий раз, когда пользователь импортирует документ в приложение. Я хочу, чтобы появилось диалоговое окно (может быть меню UIAlert или Activity sheet ), спрашивающее пользователя, действительно ли он хочет импортировать этот файл( да или отменить). Я хотел бы знать , Как заставить меню UIAlert/Actionsheet появиться Перед выполнением действия импорта и , Как назначить действие , которое будет выполнено, когда пользователь нажимает либо да, либо нет, либо "изменить файл
Отображаемое представление называется ProgressBarView.m / h. в нем viewdidload выглядит следующим образом:
- (void)viewDidLoad
{
[super viewDidLoad];
self.progressBar.progressTintColor = [UIColor colorWithRed:153.0/255 green:0 blue:0 alpha:1.0];
self.progressBar.progress = 0.0;
/*progressValueLabel = [NSString stringWithFormat:@"%.0f%%", (self.progressBar.progress * 100)];*/
self.progressTimer = [NSTimer scheduledTimerWithTimeInterval:0.3f
target:self
selector:@selector(changeProgressValue)
userInfo:nil
repeats:YES];
}
Это затем вызывается в делегате приложения, когда импорт начинается в параметрах appdidFinishLaunchwith:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
if (url != nil && [url isFileURL]) {
**[self handleImportURL:url];** // this is the function that handles the import
}
Функция, выполняющая импорт и вызывающая progressView, выглядит следующим образом:
- (void)handleImportURL:(NSURL *)url
{
// Show progress window
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
__block PVProgressViewController * progressController = [storyboard instantiateViewControllerWithIdentifier:@"kProgressViewController"];
self.window.rootViewController = progressController;
// Perform import operation
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSError *outError;
NSString * csvString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&outError];
NSArray * array = [csvString csvRows];
[[PVDatabaseController sharedController] importArray:array progressHandler:^(float progress) {
progressController.progressBar.progress = progress;
}];
dispatch_async(dispatch_get_main_queue(), ^{
self.window.rootViewController = controller;
});
});
}
1 ответ:
Вы можете определить свой NSURL как ivar и вызвать свой метод
handleImportURL:
в соответствующем методеclickedButtonAtIndex:
следующим образом:@implementation AppDelegate{ NSURL *_importURL; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { _importURL = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey]; if (url != nil && [url isFileURL]) { [self confirmImportAlert]; } }
UIActionSheet:
- (void)confirmImportAlert { UIActionSheet *myActionSheet = [[UIActionSheet alloc] initWithTitle:@"Your Title" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Yes", nil]; myActionSheet.delegate = self; [myActionSheet showInView:self.window]; } -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ if(buttonIndex == 0){ //initiate import [self handleImportURL:_importURL]; } else{ //don't initiate import } }
UIAlertView:
- (void)confirmImportAlert { UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Your Title" message:@"Your Message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Yes", nil]; [myAlertView show]; } - (void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex{ if(buttonIndex == 0){ //initiate import [self handleImportURL:_importURL]; } else{ //don't initiate import } }