#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 (изображения). (Но прокомментировал, как использовать переход)
- Добавьте класс и идентификатор к вашему дополнительному ViewController
- Выбирайте между моим переходом или созданием экземпляра. (Проверьте мои комментарии в коде)
- Если вход в систему выполнен успешно, либо выполните переход, либо перейдите с помощью instantiate.
- Удачного кодирования. 😀
Но для начала давайте взглянем на предоставленный вами код.
@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, куда вы хотите, чтобы вас привела страница входа)
Нажмите на значок, как у меня. (Который синий) и установите класс идентификатор раскадровки.
ВНИМАНИЕ! ЕСЛИ вы хотите использовать переход, убедитесь, что у вас есть соединение между 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, как указано, с помощью предоставленного вами кода, как мне интегрировать это в мой родительский контроллер?