微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果缺少值,请检查启动时的值并显示视图控制器

如何解决如果缺少值,请检查启动时的值并显示视图控制器

在启动时,在应用程序的任何地方,我希望能够检查登录用户用户名是否为空,如果为空,我想显示一个视图控制器,他们必须在其中输入用户名

以下是我检查用户是否有用户名方法

if let user = UserDefaultsUtils().getUser() {
    if (user.username == nil || (user.username != nil && user.username!.isEmpty)) {
        // Todo: Show view controller
    }
}

我应该把这段代码放在哪里,我将如何呈现视图控制器?应用委托?

解决方法

Xcode 12

首先转到您的故事板。选择您可能希望在启动时向用户显示的视图控制器,然后导航到身份检查器面板。到达那里后,您将需要设置一个唯一故事板 ID。您将在代码中引用此 ID 以指向该视图控制器。 Add a unique 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?