Swift — контроллер просмотра, защищенный паролем

#ios #swift #passwords #segue

#iOS #swift #пароли #segue

Вопрос:

Я пытаюсь создать контроллер просмотра, защищенный паролем.

пока —

Созданная раскадровка — на viewcontroller — созданный жестко запрограммированный вход в систему — выводится на консоль в случае успеха или нет.

текстовые поля и т.д…

 @IBOutlet weak var untext: UITextField!

@IBOutlet weak var pwtext: UITextField!


let username = "admin"
let password = "adminpw"

override func viewDidLoad() {
    super.viewDidLoad()
    pwtext.isSecureTextEntry = true
}

@IBAction func loginbtn(_ sender: Any) {
    if untext.text == username amp;amp; pwtext.text == password
    {
        print("log in succesful")
    }   else {
        print("log in failed")
    }

}
  

Проблема, с которой я сталкиваюсь, когда я нажимаю кнопку входа, она переводит меня на страницу администратора, в случае успеха или нет.

Как я могу напечатать уведомление — на экране — в случае неудачи и остаться на текущем контроллере просмотра, а в случае успеха перевести меня в admin view controller?

Комментарии:

1. Добро пожаловать, но помогите нам помочь вам, разместив полный код, который вы пробовали использовать для решения этой проблемы, на контроллере просмотра, где untext и pwtext ?

2. добавлен дополнительный код по запросу

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

Ответ №1:

Вы можете использовать либо segue, либо instantiateViewController. Но в этом примере я буду использовать instantiateViewController (изображения). (Но прокомментировал, как использовать переход)

  1. Добавьте класс и идентификатор к вашему дополнительному ViewController
  2. Выбирайте между моим переходом или созданием экземпляра. (Проверьте мои комментарии в коде)
  3. Если вход в систему выполнен успешно, либо выполните переход, либо перейдите с помощью instantiate.
  4. Удачного кодирования. 😀

Но для начала давайте взглянем на предоставленный вами код.

 @IBAction func loginbtn(_ sender: Any) 
{
     if untext.text == username amp;amp; pwtext.text == password
     {
         print("login succeeded")
         //1. using instantiateViewController
         if let storyboard = storyboard
         {
             //Check my image below how to set Identifier etc.
             // withIdentifier = Storyboard ID amp; "ViewController" = Class 
             let vc = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
             self.present(vc, animated: false, completion: nil)
         }
         //2. Use segue (I'll wrap this with a comment incase you copy)
         //self.performSegue(withIdentifier: "SegueID", sender: self)
     }
     else
     {
         //Setting up an "AlertController"
         let alert = UIAlertController(title: "Login failed", message: "Wrong username / password", preferredStyle: UIAlertController.Style.alert)
         //Adding a button to close the alert with title "Try again"
         alert.addAction(UIAlertAction(title: "Try again", style: UIAlertAction.Style.default, handler: nil))
         //Presentating the Alert
         self.present(alert, animated: true, completion: nil)
     }
}
  

Нажмите на желтую точку на вашем ViewController (на ViewController, куда вы хотите, чтобы вас привела страница входа)

изображение 1

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

изображение 2

ВНИМАНИЕ! ЕСЛИ вы хотите использовать переход, убедитесь, что у вас есть соединение между ViewController (Login) и viewController1

Комментарии:

1. Спасибо! Я использовал метод segue — чтобы соответствовать приложению. Это сработало именно так, как я хотел. У меня была небольшая проблема, когда целевой viewcontroller загружался дважды? я решил эту проблему, изменив вид перехода с show на present модально. еще раз спасибо.

2. @Shane Насколько я слышал, вам следует использовать «присутствовать модально» при создании формы входа. (На самом деле не спрашивайте меня, почему) Но способ, который я предпочитаю, — это способ instantiateViewController. У меня никогда не возникало ни одной проблемы с этим способом. 🙂 Вот статья о том, почему не следует использовать segue: medium.com/@leandromperez/… Я рад, что у вас все получилось. 🙂 Наслаждайтесь

Ответ №2:

Предполагая, что вы используете переходы для навигации, вы можете поместить переход «общего назначения» (перетаскивание с вашего контроллера вместо любых элементов управления в нем) и присвоить ему идентификатор (идентификатор в инспекторе атрибутов перехода в раскадровке). После этого вы можете условно вызвать segue из родительского класса контроллера своим кодом:

 if passwordCorrect {
    performSegue(withIdentifier: "SegueID", sender: nil)
}
  

Комментарии:

1. Спасибо за помощь The Dreams Wind, я добавил идентификатор в segue, как указано, с помощью предоставленного вами кода, как мне интегрировать это в мой родительский контроллер?