В вашем коде есть несколько проблем, наиболее важная из которых заключается в том, что вы нажимаете свой контроллер домашнего представления, одновременно устанавливая его как контроллер представления 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)
}