В моем приложении есть контроллер представления «Создать учетную запись» (показан ниже), который предлагает пользователю ввести имя пользователя и пароль. Всякий раз, когда я перехожу к другому контроллеру представления, я получаю всплывающую страницу действий с предложением сохранить пароль в связке ключей.
Это отличный подарок, ЕСЛИ пользователь успешно создает новую учетную запись. Но я получаю такое же всплывающее окно, если пользователь нажимает кнопку отмены (назад) на панели навигации, если он выбирает вариант использования входа в 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)
}
}
Примеры из симулятора:
Создать учетную запись - (здесь пользователь вводит имя пользователя и пароль для новой учетной записи.)
Вход в Facebook
Если пользователь решает использовать Facebook для входа в систему, а не создавать учетную запись пользователя, он попадает в это представление (которое я до сих пор не уточнил). Обратите внимание, что всплыло окно действий «Сохранить пароль».
Всплывающее окно "Пользователь существует"
Если пользователь попытается создать учетную запись с уже существующим именем пользователя, ему будет представлено это всплывающее окно. Если они выберут Отмена, они вернутся на начальный экран (см. Ниже). Если они выберут Введите новое имя пользователя, они останутся на том же экране с очищенным именем пользователя. Если они выберут Вход, они попадут на экран входа в систему.
Экран запуска
Если пользователь выбирает Отмена выше, они возвращаются сюда. Опять же, обратите внимание, что всплыло окно действий «Сохранить пароль».