Отключить лист действий «Сохранить пароль» при выходе из UIViewController? - PullRequest
0 голосов
/ 22 марта 2020

Мое приложение имеет контроллер представления «Создать учетную запись» (показан ниже), который предлагает пользователю ввести имя пользователя и пароль. Всякий раз, когда я перехожу к другому контроллеру представления, я получаю всплывающую подсказку с предложением сохранить пароль в цепочке для ключей.

Это отличный маленький freeb ie ЕСЛИ пользователь успешно создает новую учетную запись. Но я получаю это же всплывающее окно, если пользователь нажимает кнопку отмены (назад) на панели навигации, если он выбирает вариант использования входа в Facebook вместо создания учетной записи, или любые другие средства для выхода из этого контроллера представления (см. Рисунки). ниже).

Как я могу получить это всплывающее окно ТОЛЬКО при успешном создании новой учетной записи?

РЕДАКТИРОВАТЬ : за запрос Вот код, связанный с переходами, которые приводят к появлению листа действия «Сохранить пароль».

из CreateAccountViewController.swift :

class CreateAccountViewController : UIViewController
{
  // ... bunch of irrelevant code deleted ...

  // bound to "Connect with Facebook" button (see image below)
  @IBAction func switchToFacebook(_ sender : UIButton)
  {
    performSegue(.SwitchToFacebookLogin, sender: sender)
  }
  // ... bunch of irrelevant code deleted ...
}

extension CreateAccountViewController : GameServerAlertObserver
{
  // callback based on response from GameCenter after 
  //  submitting a "create new user" request
  func handleConnectionResponse(_ response:GameServerResponse )
  {
    switch response
    {
    // ... other response cases removed ...
    case .UserCreated:
      self.removeSpinner()
      performSegue(.CreateAccountToStartup, sender: self)

    default:
      response.displayAlert(over: self, observer: self)
      self.removeSpinner()
    }
  }

  // Functions defined in the GameServerAlertObserver protocol
  //   to handle user response to "User Exists Popup" (figure below)    
  func ok()
  {
    // user chose to enter new  password... clear the existing username field
    usernameTextField.text = ""
  }

  func cancel()
  {
    // segue back to the startup view controller
    performSegue(.CreateAccountToStartup, sender: self)
  }

  func goToLogin()
  {
    // segue to the login view controller
    performSegue(.SwitchToAccountLogin, sender:self)
  }
}

из UIViewController_Segues :

enum SegueIdentifier : String
{
  case LoserBoard             = "loserBoard"
  case CreateAccount          = "createAccount"
  case AccountLogin           = "accountLogin"
  case FacebookLogin          = "facebookLogin"
  case SwitchToFacebookLogin  = "switchToFacebookLogin"
  case SwitchToAccountLogin   = "switchToAccountLogin"
  case CreateAccountToStartup = "createAccountToStartup"
  case AccountLoginToStartup  = "accountLoginToStartup"
  case FacebookLoginToStartup = "facebookLoginToStartup"
  case UnwindToStartup        = "unwindToStartup"
}

extension UIViewController
{ 
  func performSegue(_ target:SegueIdentifier, sender:Any?)
  {
    performSegue(withIdentifier: target.rawValue, sender: sender)
  }
}

из GameServerAlert.swift :

protocol GameServerAlertObserver
{
  func ok()
  func cancel()
  func goToLogin()
}

extension GameServerResponse
{
  func displayAlert(over controller:UIViewController, observer:GameServerAlertObserver? = nil)
  {
    var title   : String
    var message : String
    var actions : [UIAlertAction]

    switch self
    {
    // ... deleted cases/default which don't lead to segue ...

    case .UserAlreadyExists:
      title = "User already exists"
      message = "\nIf this is you, please use the login page to reconnect.\n\nIf this is not you, you will need to select a different username."
      actions = [
        UIAlertAction(title: "Go to Login page",   style: .default, handler: { _ in observer?.goToLogin() } ),
        UIAlertAction(title: "Enter new username", style: .default, handler: { _ in observer?.ok() } ),
        UIAlertAction(title: "Cancel",             style: .cancel,  handler: { _ in observer?.cancel() } )
      ]
    }

    let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
    actions.forEach { (action) in alert.addAction(action) }
    controller.present(alert,animated:true)
  }
}

Примеры из симулятора:

Создать учетную запись - (здесь пользователь вводит имя пользователя и пароль для новой учетной записи.)

enter image description here

Facebook Login

Если пользователь решает использовать Facebook для входа, а не создания пользователя счет, они приняты к этой точке зрения (которую я до сих пор не конкретизировал). Обратите внимание, что всплывающий лист действий «Сохранить пароль».

enter image description here

Пользователь существует всплывающее окно

Если Пользователь пытается создать учетную запись с именем пользователя, которое уже существует, ему будет показано это всплывающее окно. Если они выбирают Отмена , они возвращаются на экран запуска (см. Ниже). Если они выберут Введите новое имя пользователя , они будут сохранены на одном экране с очищенным именем пользователя. Если они выбирают Логин , они переходят на экран входа в систему.

enter image description here

Стартовый экран

Если пользователь выбирает Cancel выше, они возвращаются сюда. Опять же, обратите внимание, что всплывающий лист действий «Сохранить пароль».

enter image description here

1 Ответ

0 голосов
/ 23 марта 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...