перед началом операции в 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 2

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
    }
}