当需要切换rootViewController时

2024-05-01

我一直在开发一个 Swift 项目,我有两个视图控制器,登录视图控制器和主页视图控制器。当用户启动应用程序时,如果用户未登录,我想显示登录视图控制器,另一方面,如果用户登录,我想显示主页视图控制器。

所以流程会是这样的。

当用户未登录时,显示

  1. 登录视图控制器
  2. 主页视图控制器

当用户已经登录时,显示

  1. 主页视图控制器

在场景代表中,我写了

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let scene = (scene as? UIWindowScene) else { return }

    window = UIWindow(frame: scene.coordinateSpace.bounds)
    window?.windowScene = scene
    window?.rootViewController = HomeViewController() or LoginViewController() depending on the user's login status
    window?.makeKeyAndVisible()
}

我想知道是否应该将 HomeViewController 应用为 rootviewcontroller,无论用户的登录状态如何(并且当用户未登录时可能在 homeVC 上显示 loginVC),或者我应该根据用户的登录状态切换视图控制器。

那么,在这种情况下,切换rootviewcontroller还有什么意义呢?以及为什么切换根视图控制器是(或不重要)?

当我将视图控制器应用于根视图控制器属性时,有什么我应该考虑的吗?


// SceneDelegate.swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let _ = (scene as? UIWindowScene) else { return }

    // if user is logged in before
    if let loggedUsername = UserDefaults.standard.string(forKey: "username") {
        window?.rootViewController = HomeViewController()
    } else {
        // if user isn't logged in
        window?.rootViewController = LoginViewController()
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当需要切换rootViewController时 的相关文章

  • 如何使用 CNContacts 快速获取手机号码?

    我有一些代码可以检索用户联系人中的所有电话号码 但只想过滤掉手机号码 目前 我只是通过将第一个数字为 或第二个数字为 7 的数字添加到数组中来实现此目的 如下所示 func findContacts gt CNContact let key
  • nlohmann/json 框架中的未知断点

    一段时间以来 当我在启用断点的 Xcode 下运行我的应用程序时 我显然在名为 nlohmann basic json 的系统框架中遇到了一个未知断点 我可以毫无问题地继续执行 但这无论如何都很烦人 知道这个断点的原因是什么 或者更好的是
  • 在 iOS 应用程序中拨打电话

    我有一些代码尝试在应用程序中进行调用 但它似乎不起作用 UIApplication myApp UIApplication sharedApplication NSString theCall NSString stringWithForm
  • 有没有办法在 Firebase 中等待查询完成?

    我正在使用 TableView 在 Viewcontroller 中的 iOS 应用程序中进行查询 我想确保在继续加载 TableView 之前我的查询已经返回 有没有办法保证查询已经完成 None
  • 将类型传递给通用 Swift 扩展,或者理想情况下推断它

    说你有 class Fancy UIView 你想找到所有兄弟姐妹Fancy意见 没问题 https stackoverflow com q 37232743 294884 for v UIView in superview subview
  • iOS 7 tabBar 横线,如何去掉?

    Apple 在 iOS 7 中的 tabBar 上添加了一条细线 该线应该在 tabBar 和 UI 之间起到阴影或淡入淡出的作用 由于我使用的是定制的 tabBar 这条线非常令人恼火 你如何删除它 请告诉我这是可能的 否则我需要重新设计
  • 我的 UICollectionView 无法使用 Swift 平滑滚动

    我有一个CollectionView它使单元出队取决于message类型 例如 文本 图像 我遇到的问题是当我向上 向下滚动时滚动确实很不稳定 因此用户体验不是很好 这仅在第一次加载单元格时发生 之后滚动就会平滑 我有什么想法可以解决这个问
  • SwiftUI:隐藏键盘但显示光标

    我想使用自定义按钮将文本输入到TextField 但仍显示并移动光标 有没有办法隐藏默认键盘 同时仍然显示光标 我希望有这样的事情 TextField text text keyboardType none 这是它目前的样子 您可以使用UI
  • 如何使用phonegap在iOS应用程序中防止键盘推送webview

    当屏幕底部的输入字段获得焦点时 键盘会向上推我的网络视图 并且页面的上部不再可见 我想防止键盘推高网络视图 有人有主意吗 对焦 设置window scrollTo 0 0 这可以防止键盘完全推高 webview input on focus
  • AVAudioPlayer 无法从网站播放 m4a 或 mp3 文件类型

    我试图在我的应用程序中找到一个仅纯 m4a 声音的 URL 我有音频的 URL 理论上可以下载它 然后 使用下载的文件URL到声音 我尝试使用AVAudioPlayer播放它 但它不播放任何声音 这是我的代码 在 URL 检索函数中 我调用
  • 动态调度协议扩展不适用于多个目标

    这是我的主要目标中的代码 所以不是测试目标 protocol ProtocolA func dontCrash extension ProtocolA func dontCrash fatalError func tryCrash dont
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 如何使用 IOS 12 在 UITableViewCell 中正确添加 UICollectionView

    由于某些原因 在使用 Xcode 10 beta 时 我无法正确显示 tableview 单元格内集合中的某些项目 在过去的四天里我尝试了我所知道的一切 我做了一个小项目样本来看看我的问题是什么 如果有人想在本地运行完整代码 请参见此处 h
  • UICollectionView setLayout:animated: 不保留 zIndex

    我注意到打电话时setLayout animated in a UICollectionView要在两个布局之间切换 当前可见的单元格不遵循zIndex它的布局属性已设置在layoutAttributesForItemAtIndexPath
  • 詹金斯配置文件问题

    检查依赖关系 找不到与 Nitin xxxxxxx xyzCAppStore 匹配的 iOS 配置文件 Xcode 找不到与 Nitin xxxxxxx xyzCAppStore 匹配的配置文件 安装配置文件 通过将其拖放到 Xcode 的
  • 如何在 Swift 2.0 中使用 stringByAddingPercentEncodingWithAllowedCharacters() 作为 URL

    我在 Swift 1 2 中使用过这个 let urlwithPercentEscapes myurlstring stringByAddingPercentEscapesUsingEncoding NSUTF8StringEncoding
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • 在 Object 子类及其自己的子类上实现ignoreProperties()

    我是领域新手 我正在使用继承自 Object 的基类以及该基类的自定义子类创建模型 我的模型要求基类通过覆盖静态来声明一些属性被忽略ignoredProperties 方法 当尝试在某些基类子类上重写该方法时 我收到一个 Swift 编译器
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换

随机推荐

  • Python - 列出文件夹中的文件 - 带变量的路径名

    我对此非常陌生 我正在使用 python 我想列出多个不同文件夹中的文件 使用 Windows 在我的第一次尝试中 我有很多路径变量 每条路径都有自己的变量 它确实有效 但这似乎是一种冗长的做法 由于除了文件夹名称之外 路径均相同 因此我尝
  • 使用包含双引号的字符串填充输入字段

    我从服务器返回一个值 其中包含双引号 我需要用值填充输入标签 我尝试过使用 escape myVariable 但这会将空格转换为 20 等 我想我可以写一个 if then 来表示如果字段中有双引号 则使用 value 但是如果字段中同时
  • 如何访问 Go 中的嵌套模块(子模块)?

    去版本 1 12 9 这是一个简单演示项目的结构 所以我们有一个模块domain 其中包含两个模块 activity and person 我想将域与主文件中的所有嵌套模块一起使用 gt 模块 go 我知道如何导入domain主要在go m
  • SciKit-Learn 的分解模块中未安装 LatentDirichletAllocation

    我在 SciKit Learn 包中遇到了一些奇怪的问题 SciKit Learn 包内有 分解 模块 其中应包含 LatentDirichletAllocation 函数 请参阅此处的文档 https scikit learn org s
  • 根据机会创建销售订单时填充自定义字段

    我在 SO 屏幕 SO301000 上创建了一个自定义字段 联系人 现在 当用户从机会屏幕 CR304000 创建销售订单时 我需要填充这些字段 新的自定义字段联系人基于在机会中选择的客户 我可以看到 当我从机会创建销售订单时 客户会自动填
  • 带 webusb 的指纹扫描仪

    可以将 USB 指纹扫描仪与 webusb 连接 配对 https wicg github io webusb https wicg github io webusb 我有数字角色 U are U 4500 想要使用react js 连接到
  • 使用 Codename One 在 WebView 上实现 WebRTC

    我正在开发一个应用程序 我需要使用 Android 的 WebView 包含 WebRTC 根据这篇文章 https developer chrome com multidevice webview overview https devel
  • 使用 JSON 响应

    执行 ajax 请求后 我从服务器收到以下响应 error false success true 我的ajax代码 ajax url update type post data this serialize success function
  • HashSet 是否与 List 相同但具有唯一性?

    我需要有能力在收藏中拥有独特的物品 我打算使用字典 这样我就可以使用 ContainsKey 方法 但我认为这会很浪费 因为我不会使用键 值对的 Value 属性 我遇到了HashSet
  • 如何使表单仅位于应用程序的最顶层?

    我正在制作 Excel 插件 其中单击菜单项或工具栏按钮 打开表单 我已将窗体的最顶层设置为 true 但它仍然是 Windows XP 的所有应用程序的最顶层 我只需要保持 Microsoft Excel 的最高位置即可 我在 Visua
  • 如何在接收端打开没有 SSHD 的 shell?

    我有一台没有 SSHD 的机器 我想从远程机器 我可以完全控制 在这台机器上打开 bash shell 由于我的有限机器上有 SSH 因此我配置了反向代理 ssh R 19999 localhost 22 remoteuser remote
  • Xcode 更改未修改的 Storyboard 和 XIB 文件

    从 git 工作流程的角度来看 当多人协作时 故事板是一种巨大的痛苦 例如 storyboard 文件中的 XML 有其起始位置
  • 如何循环遍历 Windows 窗体窗体中的所有控件或如何查找特定控件是否是容器控件?

    我会告诉我的要求 我需要有一个keydown中每个控件的事件Windows 窗体 http en wikipedia org wiki Windows Forms形式 如果我必须对所有 keydown 事件执行的操作相同 那么最好这样做 而
  • Rails 3.1 资源在服务器重新启动之前无法识别 rmagick 上传的新图像

    我有我的Rails 3 1 0应用程序运行passenger in production环境 我有一个部分 应用程序允许用户更改他的个人资料图片 因此我使用 ajax 上传器上传图像 在我的控制器中 我上传文件并使用 rmagick 为图像
  • Jquery UI 滑块 - 输入值并将滑块移动到位置

    我想知道是否有人找到了实际填充滑块的输入框并使其滑动到适当位置 onBlur 的解决方案或示例 目前 众所周知 它只是用您所在的位置更新此值在 因此 在某些方面 我试图扭转这个令人惊叹的滑块的功能 我找到的一个链接 http www web
  • 如何使 Angularjs 应用程序可抓取

    我使用 Angular js 构建单页应用程序 我的问题是如何使应用程序可爬行 因为路由是在客户端使用 ng view 处理的 而服务器只返回简单的头文件 网站链接 http india elections in http india el
  • 如何更新 Android 上的 Google Analytics 清单?

    我正在尝试禁用 Google Firebase Analytics 的自动屏 幕报告 在里面Firebase 博客文章 https firebase googleblog com 2020 08 google analytics manua
  • 制作波浪动画

    我正在尝试制作音频波动画 这段代码有什么问题 我尝试将翻译更改为比例 但没有成功 有人可以给我一些动画练习的链接吗 webkit box sizing border box box sizing border box webkit pers
  • 调用过程默认值而不将值绑定到 Jdbc 中的参数

    我正在尝试打电话PL SQL为其某些参数定义了默认值的过程 我正在这样做使用CallableStatement in JDBC 该过程有大量已定义默认值的参数 我不想在 Java 代码中显式设置默认值 这样做会使维护代码变得更加困难 如果
  • 当需要切换rootViewController时

    我一直在开发一个 Swift 项目 我有两个视图控制器 登录视图控制器和主页视图控制器 当用户启动应用程序时 如果用户未登录 我想显示登录视图控制器 另一方面 如果用户登录 我想显示主页视图控制器 所以流程会是这样的 当用户未登录时 显示