如何解决如果缺少值,请检查启动时的值并显示视图控制器
在启动时,在应用程序的任何地方,我希望能够检查登录用户的用户名是否为空,如果为空,我想显示一个视图控制器,他们必须在其中输入用户名。
if let user = UserDefaultsUtils().getUser() {
if (user.username == nil || (user.username != nil && user.username!.isEmpty)) {
// Todo: Show view controller
}
}
我应该把这段代码放在哪里,我将如何呈现视图控制器?应用委托?
解决方法
Xcode 12
首先转到您的故事板。选择您可能希望在启动时向用户显示的视图控制器,然后导航到身份检查器面板。到达那里后,您将需要设置一个唯一故事板 ID。您将在代码中引用此 ID 以指向该视图控制器。 。
对您可能需要在启动时显示的所有控制器执行此操作。
然后您可以转到 SceneDelegate.swift 文件。我们将在 scene 函数中编写一些代码,但首先让我们看看它的作用。
var rootViewController : UIViewController
这是最终将显示给用户的控制器。暂时没有设置。
rootViewController = UIStoryboard(name: "{YOUR_STORYBOARD_FILE_NAME}",bundle: nil).instantiateViewController(withIdentifier: "homepage")
它的作用是获得一个视图控制器。如果用户之前输入了他们的用户名,这是您想要显示的视图控制器。首先,您获取当前故事板的实例(即您要显示的视图控制器所在的位置)。然后从那里我们实例化存在于故事板中的视图控制器。在这里,您必须将标识符替换为您设置的标识符。
rootViewController = UIStoryboard(name: "{YOUR_STORYBOARD_FILE_NAME}",bundle: nil).instantiateViewController(withIdentifier: "enterUsername")
同样,对于另一个视图控制器,如果用户尚未输入其用户名,您想要显示的视图控制器。
然后我们可以用这三行将控制器显示为根控制器:
window.rootViewController = rootViewController
self.window = window
window.makeKeyAndVisible()
现在是整个函数,同时添加您的条件:
func scene(_ scene: UIScene,willConnectTo session: UISceneSession,options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
if let windowScene = scene as? UIWindowScene{
let window = UIWindow(windowScene: windowScene)
// this is the view controller displayed if the user is already registered
var rootViewController : UIViewController
if let user = UserDefaultsUtils().getUser() {
if (user.username == nil || (user.username != nil && user.username!.isEmpty)) {
// This is the view controller displayed if the user is already registered.
rootViewController = UIStoryboard(name: "{YOUR_STORYBOARD_FILE_NAME}",bundle: nil).instantiateViewController(withIdentifier: "enterUsername")
}
} else {
rootViewController = UIStoryboard(name: "{YOUR_STORYBOARD_FILE_NAME}",bundle: nil).instantiateViewController(withIdentifier: "homepage")
}
window.rootViewController = rootViewController
self.window = window
window.makeKeyAndVisible()
}
}
现在,当您启动应用程序时,它应该显示正确的视图控制器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。