2013-08-16 3 views
0

Я все еще новичок в iOS, и в приложении, которое я разрабатываю, есть это представление, которое появляется, когда пользователь импортирует файл из внешнего источника. Я хотел бы иметь импорт выполняется только после того, как пользователь подтверждает, что в листе действий, hiearchy выглядит следующим образом:iOS: попросить пользователя подтвердить действие с помощью ActionSheet перед отправкой отправки. Запрос очереди

  • Пользователь выбирает из своей электронной почты, чтобы открыть файл в приложении.

  • Затем он переключается на progressView (который программно становится корневым представлением во время процесса импорта).

  • Процесс завершается, а корневой режим по умолчанию установлен обратно.

То, что я хочу спросить, если пользователь действительно хочет импортировать как только progressView шоу, а если нет, он должен отменить его (я не знаю, как это сделать)

благодарственное вы,

Вот функция:

- (void)handleImportURL:(NSURL *)url 
{ 



    __block JASidePanelController * controller = (JASidePanelController *)self.window.rootViewController; 

    // Show progress window 
    UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

    __block PVProgressViewController * progressController = [storyboard instantiateViewControllerWithIdentifier:@"kProgressViewController"]; 


    self.window.rootViewController = progressController; 
    // I think here somethings needs to be done with UIActionsheet  
    // 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; 
     }); 
    }); 
} 

Update: Так вот то, что я пытался сделать с действием листа:

//First the function that calls the handleImport 
    -(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
    { 
     // Handle CSV Import 
     if (url != nil && [url isFileURL]) { 
      [self handleImportURL:url]; 
      [self confirmImportAlert]; 

     } 
     return YES; 
    } 

// Для того, чтобы показать лист действий

- (void)confirmImportAlert { 
    UIActionSheet *myActionSheet = [[UIActionSheet alloc] initWithTitle:@"Proceed through Import?" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Yes", @"Maybe", nil]; 
    [myActionSheet showInView: self.window]; 
} 

// what to do 
    -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ 
     if(buttonIndex == 0){ 
      // Avoid Import 
     } 
     else{ 
      [self handleImportURL:_importURL]; 

      //initiate import 
     } 
    } 

UPDATE 2: Так я добавил и изменил два метода (я не могу показаться, чтобы вызвать функцию ActionSheetWilldismiss в приложение делегата):

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ 

    NSString *choice = [ actionSheet buttonTitleAtIndex:buttonIndex]; 
    if(buttonIndex == 0){ 
     //initiate import 
     [self handleImportURL:_importURL]; 
    } 
    else{ 
     //don't initiate import 
    } 
} 

//This methods creats the action sheet 
    - (void)confirmImportAlert { 
     // importActionSheet is a property in the appdelegate.h 

     if (!self.importActionSheet){ 
      UIActionSheet *myActionSheet = [[UIActionSheet alloc] initWithTitle:@"Proceed through Import?" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Yes", nil]; 
      [myActionSheet showInView: self.window]; 
      myActionSheet.delegate = self; 

      self.importActionSheet = myActionSheet; 
     } 


    } 

И изменил функцию, которая вызывает импорт:

-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    // Handle CSV Import 
    if (url != nil && [url isFileURL]) { 

     [self confirmImportAlert]; 
     //[self handleImportURL:url]; 



    } 
    return YES; 
} 

ответ

0

Независимо от того, какое действие вызвало вызов -handleImportURL:, вместо этого следует создать UIActionSheet и показать его.

Если это кнопка, например:

-(void)buttonTapped:(UIButton *)sender 
{ 
    // [self handleImportURL:someURL]; 
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil 
                  delegate:self 
                cancelButtonTitle:@"Cancel" 
               destructiveButtonTitle:nil 
                otherButtonTitles:@"Confirm",nil]; 
    [actionSheet showInView:self.view]; 
} 

Затем вам нужно реализовать метод делегата:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (actionSheet.cancelButtonIndex != buttonIndex) { 
     [self handleImportURL:someURL]; 
    } 
} 
+0

Здравствуйте, я сделал попытку (см. Выше), чтобы добавить лист действий, но если я удалю [self handleImportURL: url] в функции OpenUrl, он не будет работать. –

0

Вы должны создавать и показывать UIActionsheet в своем методе, но не выполнять какой-либо из текущего кода, который у вас есть. Весь текущий код, который у вас есть, должен быть перенесен на другой метод и этот метод должен быть вызван, если пользователь нажал правильную кнопку в методе делегирования actionSheet:willDismissWithButtonIndex:.

+0

Здравствуйте, я пытался добавить функцию, которая обрабатывает нажатия кнопок на действия листа, но он, похоже, не выполняет и не показывает progressView, даже если я не нажимаю на отмену –

+0

Вы установили свой контроллер в качестве делегата листа действий? – Wain

+0

Да, это @interface PVProgressViewController()

Смежные вопросы