1

У меня есть Parse Sign Up, и у меня есть UIAlertController, и я хочу, чтобы UIAlertController отображался с индикатором, но увольнялся с другим контроллером UIAlertController при возникновении ошибки в регистрации.Замените UIAlertController другим UIAlertController

У меня есть несколько случаев неудачной регистрации, все работают до добавления UIAlertController с индикатором. Контроллер предупреждений индикатора отлично работает, когда регистрация успешно завершена, и она убирается правильно.

//create an alert controller 
    let pending = UIAlertController(title: "Creating New User", message: nil, preferredStyle: .Alert) 

    //create an activity indicator 
    let indicator = UIActivityIndicatorView(frame: pending.view.bounds) 
    indicator.autoresizingMask = .FlexibleWidth | .FlexibleHeight 
    //add the activity indicator as a subview of the alert controller's view 
    pending.view.addSubview(indicator) 
    indicator.userInteractionEnabled = false // required otherwise if there buttons in the UIAlertController you will not be able to press them 
    indicator.startAnimating() 
    self.presentViewController(pending, animated: true, completion: nil) 

Вот код зарегистрируется, это работает

 if signUpError == nil { 
      println("Sign Up Successful") 
      // Keep track of the installs of our app 
      var installation: PFInstallation = PFInstallation.currentInstallation() 
      installation.addUniqueObject("Reload", forKey: "channels") 
      installation["user"] = PFUser.currentUser() 
      installation.saveInBackground() 


      // to stop the uialertviewcontroller once sign up successful 
      pending.dismissViewControllerAnimated(true, completion: { 
       self.performSegueWithIdentifier("goToAppFromSignUp", sender: self) 

      }) 

     } 

Вот где я застрял, это лишь один из случаев, если я могу получить эту работу, я могу это сделать для других.

 else { 
      println("Error Sign Up") 


      //If email has been used for another account kPFErrorUserEmailTaken 
      if(signUpError!.code == 203) { 

       let alertController = UIAlertController(title: "Sign Up Failed", message: "Sorry! Email has been taken! ", preferredStyle: .Alert) 


       let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in 
        // ... 
       } 
       alertController.addAction(OKAction) 



        self.presentViewController(alertController, animated: true) { 
         // ... 
        } 
      } 

Моя мысль была уволить UIAlertController и показать следующий в блоке завершения

pending.dismissViewControllerAnimated(true, completion: { 
self.presentViewController(alertController, animated: true) { 
       // ... 
      } 

     }) 

Но приложение зависает на ожидании оповещения контроллера (тот, с индикатором). , который уже представляет (0)

Любые идеи? Благодарю.

+0

В разделе «Еще» вы не отпустите ожидающий контроллер. –

ответ

1

В документации на яблоко указано, что вы не должны изменять иерархию представлений для UIAlertController. Это может вызвать проблемы позже и может стать частью вашей текущей проблемы.

Также вероятно, что представление одного, когда выполняется другое, вызывает вашу проблему. Увольнение первого и после полного представления второго должно теоретически исправить вашу проблему. Тот факт, что он висит, говорит о том, что происходит что-то еще. Вы должны остановить и удалить индикатор активности из представления, прежде чем отклонить его.

Лучший подход, я думаю, будет рассматривать использование HUD как https://github.com/jdg/MBProgressHUD, чтобы отображать прогресс или активность, а не пытаться использовать контроллер предупреждений с той целью, для которой он не предназначался.

HUD отлично подходит для представления прогресса или активности в ожидании событий. Он имеет несколько параметров отображения, включая активность с заголовком. Я бы представил HUD, когда вы ждали, а затем используйте контроллер предупреждения для представления предупреждений.

Я нашел, что использование HUD выглядит лучше и намного легче контролировать.

+0

Рори, я смотрю в MBProgress HUD, это именно то, что я пытался сделать мой собственный! Мой вопрос будет в том, как я могу легко интегрировать это с легкостью? – kareem

+0

Я думаю, все, что вам нужно сделать, это добавить файлы MBProgressHUD.h и MBProgressHUD.m в ваш проект. xcode спросит, хотите ли вы создать мостовой заголовок. Тогда вы можете просто использовать его из быстрого. См. Https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html –

+0

Рори, да!Я использовал cocopods и интегрировал в тестовый проект! Его очень аккуратное спасибо вам снова! – kareem

3

Попробуйте отклонить ожидающее предупреждение и представить следующее предупреждение без анимации.

pending.dismissViewControllerAnimated(false, completion: nil) 
self.presentViewController(alertController, animated: false, completion: nil) 
+0

В итоге я просто положил все остальные условия в блок завершения, и он сработал, я тоже попробую ваше решение – kareem

+0

Очень уродливый, но эффективный – Santiago

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

  • Нет связанных вопросов^_^