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