Мое представление пользовательского интерфейса испортилось после входа в систему (ios swift 5) - PullRequest
0 голосов
/ 16 июня 2020

Я создал очень простую страницу входа, и когда они совпадают, она будет go на домашней странице. Но это вроде как лажает, когда попадает на домашний экран. изображения, как показано ниже:

Login page Home Page that messed up

где, если я помещаю исходный вид в вид главного экрана, он будет работать как ожидалось так:

Home screen

вот мой простой код для входа:

@IBAction func LoginTapped(_ sender: Any) {

    let id = idTxtfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)
    let password = passwordTxtfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)

    if id == "ID" && password == "Password" {
        let HomeScreenVC = self.storyboard?.instantiateViewController(identifier: "HomeScreenVC") as! HomeScreenVC
        self.navigationController?.pushViewController(HomeScreenVC, animated: true)

        // make it as root view
        self.view.window?.rootViewController = HomeScreenVC
        self.view.window?.makeKeyAndVisible()
    }

    else {
        print("wrong password")
    }
}

Я сделал что-то не так? Любая помощь будет оценена Спасибо

1 Ответ

0 голосов
/ 16 июня 2020

В вашем коде есть несколько проблем, наиболее важная из которых заключается в том, что вы нажимаете свой контроллер домашнего представления, одновременно устанавливая его как контроллер представления root. Вы не должны делать и то, и другое, и это, вероятно, причина того, что ваш пользовательский интерфейс выглядел испорченным.

Если вы хотите просто вывести sh его на экран, просто используйте:

navigationController?.pushViewController(homeViewController, animated: true)

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

UIApplication.shared.windows.first(where: { $0.isKeyWindow })

Кроме того, всегда рекомендуется использовать Lower Camel Case для имен ваших свойств или методов и Upper Camel Case для имена ваших структур, перечислений или классов.

Итак, наконец, ваш метод didTapLogin() станет:

@IBAction func didTapLogin() {
    guard let username = usernameTextField.text, let password = passwordTextField.text, username == "some_username", password == "some_password" else {
        // Wrong password
        return
    }
    guard let mainWindow = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) else { return }
    let homeViewController = storyboard!.instantiateViewController(identifier: "HomeScreenVC") as! HomeScreenVC
    mainWindow.rootViewController = homeViewController
    UIView.transition(with: mainWindow, duration: 1.0, options: .transitionCrossDissolve, animations: nil, completion: nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...