显示带有故事板的一次性登录屏幕的最佳实践

2024-02-19

我在这里看到过类似的问题,但没有明确的答案。因此,我有一个模式登录视图,其中包含经典的用户名/密码表单、Facebook 登录按钮和注册按钮,我希望在用户第一次启动应用程序时显示这些按钮。据我发现,有两种方法可以实现这一点,但都有缺点。

  1. 在 AppDelegate 的 didFinishLaunchingWithOptions 中,设置一个条件来检查用户是否登录。如果没有,则将 rootViewController 设置为 loginViewController。成功登录后,将转到应用程序的主视图。我对这种方法的问题是我不确定如何将 rootViewController 重置到主视图。这可能吗?如何实现?

有没有其他方法可以在不设置 rootViewController 的情况下显示登录模式?这意味着我会将 rVC 保留在主视图中。

  1. 在主视图控制器中的 viewDidAppear 中,条件检查用户是否已登录。如果没有,则执行到 loginVC 的 segue。当用户成功登录时,他将返回到主视图,该主视图关闭了模式登录视图。这种方法的问题在于,主要视图被简要显示,我不想这样做。

  2. 还有其他想法吗?请让我知道针对这种情况的最佳实践是什么。先感谢您,


在我看来,解决此类问题的最佳策略是在应用程序启动时在主视图控制器上显示登录屏幕,并在用户登录后很好地关闭并释放。我发现大多数先前建议的解决方案(以及这里的建议:Storyboard 登录屏幕的最佳实践,处理注销时清除数据 https://stackoverflow.com/questions/19962276/best-practices-for-storyboard-login-screen-handling-clearing-of-data-upon-logou)不要优雅地完成这个任务。

经过昨天的一些实验,我认为最好的方法是使用子视图控制器:

1. 像平常一样在 Xcode 中选择主界面故事板(无需向您的主界面添加任何内容)appDelegate

2. 将以下内容添加到主视图控制器中viewDidLoad:

// If user is not logged in, show login view controller
if (!isLoggedIn) {
    // Instantiate Login View Controller from storyboard
    UIStoryboard *mainSB = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    UIViewController *loginVC = [mainSB instantiateViewControllerWithIdentifier:@"Login"];

    // Set the Login View Controller's frame
    loginVC.view.frame = self.view.bounds;

    // Add login screen as a subview and as a child view controller
    [self.view addSubview:loginVC.view];
    [self addChildViewController:loginVC];
    [loginVC didMoveToParentViewController:self];

    // Maintain a reference to the Login screen so we can dismiss it later
    _loginVC = loginVC;
}

3. 用户登录后,通过使用通知或委托通知您的主视图控制器。然后,您可以按照您希望的方式将登录屏幕动画化。这里我使用的是溶解动画:

// Animate out the category chooser
[UIView animateWithDuration:0.2 animations:^{
    // Dissolve the login screen away
    [_loginVC.view setAlpha:0];
} completion:^(BOOL finished) {
    // Remove login screen as a child view controller
    [_loginVC willMoveToParentViewController:nil];
    [_loginVC.view removeFromSuperview];
    [_loginVC removeFromParentViewController];

    // nil out property
    _loginVC = nil;
}];

就是这样!这样,主视图控制器始终是窗口的根视图控制器,用户登录后登录屏幕将被释放,并且首次呈现登录屏幕时不会出现闪烁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显示带有故事板的一次性登录屏幕的最佳实践 的相关文章

  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • 如何将 NSDecimal 值转换为 NSInteger 值?

    我遇到一种情况 我得到一个 NSDecimal 并且我需要一个 NSInteger 我确实知道这是一个非常小的值 这是绝对肯定的 它不会大于 100 所以将它转换为 NSInteger 就完全没问题 不会发生溢出 这怎么可能做到呢 NSDe
  • iPhone 的电子书框架

    我有一本书想作为 iPhone 应用程序发布 有谁知道我可以使用免费 或便宜 的框架来实现这一目标 换句话说 我想为我的书创建一个独立的 XCODE 项目 其中包含 iPhone 用户将本书作为独立应用程序阅读所需的所有代码 我见过 O R
  • 如何在 iOS 9 上可靠地检测是否连接了外部键盘?

    在 iOS 9 之前 确定是否连接外部键盘的最可靠方法是监听UIKeyboardWillShowNotification并使文本字段成为第一响应者 如中所述这个问题 https stackoverflow com questions 289
  • 如何获取CATransition/Animation的结束事件?

    我的代码如下所示 CATransition transition CATransition animation transition duration duration 我希望得到CATransition Animation的结束事件 是否
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • 更改组织以使用 Xcode 9 在 iTunes Connect 上上传二进制文件

    我在 Xcode9 上配置了多个团队 当我尝试将二进制文件上传到 Xcode 9 上的 iTunes Connect 时 没有更改团队的选项 并且出现以下错误 ERROR ITMS 4088 来自苹果开发者论坛的解决方案 1 正常存档2 窗
  • 适用于 iPhone / iPad / iOS 的快速、精益 PDF 查看器 - 提示和提示?

    最近有很多关于绘制 PDF 的问题 是的 您可以使用UIWebView但这无法提供您所期望的优秀 PDF 查看器的性能和功能 您可以绘制PDF页面到 CALayer http www cocoabuilder com archive coc
  • 在 iOS 上将 NSString 转换为 NSDate 的正确方法?

    我一直在使用此方法将常规 NSString 对象转换为 NSDate 但尝试向 Apple 提交更新 但遭到拒绝 在 iOS 中还有什么其他方法可以做到这一点 NSString date str 2011 08 12T12 20 00Z N
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • 虚拟乐器 iPhone 应用程序中的 VoiceOver 辅助功能?

    我收到盲人用户的评论 称我的一些声音和音乐相关应用程序只能在关闭 VoiceOver 的情况下使用 在 iOS 设备上启用 VoiceOver 辅助功能后 是否可以启用音乐键盘或鼓垫触摸区域 以便在点击键盘键或虚拟鼓组 等 时可以立即播放音
  • AVAssetExportSession 为零 iPhone 7 - Plus 模拟器

    AVAssetExportSession在 iPhone 6 及以下版本上运行良好 但在 iPhone 7 iPhone 7 Plus 模拟器上运行不佳 Xcode 8 0 这段代码return nil在exportSession中 当在i
  • 使用 Vaadin Flow Web 应用程序处理全局所有布局和“路由”URL 的登录

    Vaadin 8 在 Vaadin 8 中 在我的UI子类我通过检查用户的会话是否带有一个属性来处理登录 该属性表明他们是否已成功登录 如果没有的话 我的UI子类显示登录布局 而不是带有导航选项的其他内容 例如菜单栏和在该 UI 内切换布局
  • insertNewObjectForEntityForName:

    我使用 Xcode xcdatamodel 文件编辑器设置了一个实体 我创建了一个名为 Person 的实体 添加了一些属性 然后生成了一个 m 文件来表示它 一切都很好 现在 当我去编写一行代码时 例如 Person person Per
  • 在 iPhone 中缝合图片

    我想并排缝合2张png 在Cocoa中 我会使用 NSImage initWithSize 然后只是drawInRect 但是 UIImage 没有 initWithSize 类 我现在该怎么做 Use UIGraphicsBeginIma
  • 加载新控制器时,iPhone 横向模式切换到纵向模式

    我的应用程序在横向模式下正确启动并且运行良好 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation if interf
  • 使用 Apache HTTPd 模块的 OAuth 2.0 身份验证

    是否可以使用 Apache HTTPd 服务器模块来实现 OAuth 2 0 或 1 0 我选择这条路线是因为每个请求都会首先到达 HTTPd 模块 因此我必须从那里进行身份验证 如果可能的话 请分享相关链接 我要补充一下尤金尼奥的答案mo
  • 如何在 iOS 8 中关闭两个 UIViewController?

    我正在使用 Objective C 开发 iPhone 应用程序 由于我需要一次关闭两个 UIViewController 所以我使用下面的代码 self presentingViewController presentingViewCon
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr

随机推荐

  • 如何使用 Javascript 从 JSON 文件中选择随机对象(?)?

    在我正在制作的 Discord Bot 中 它需要从 JSON 文件中选择一个随机对象 我当前的代码是这样的 function spawn if randomNum 24 return const name names randomNum
  • UISearchBar 范围栏位置?

    我在使用 iPad 应用程序 我想知道是否可以将范围栏从 UISearchBar 的右侧移动到另一个位置 我希望将范围栏放在搜索栏下方 那可能吗 提前致谢 好的 这是我的解决方案 我将实现我自己的分段控件来创建搜索范围的可能性 let ca
  • 反应本机本地通知

    我是 React Native 的新手 需要实现一个功能 应用程序需要每天在特定时间向用户发送通知 每天要显示的数据存储在客户端的json文件中 不会改变 通知已按计划进行 鉴于我希望有一种方法可以从应用程序本身触发通知 有谁知道无需将应用
  • 访问相机和照片库

    在我的 iOS 应用程序中 我有一个 ImageView 和两个用于打开相机和照片库的按钮 当我单击其中一个按钮时 应用程序将关闭 我在我的设备上运行应用程序 而不是模拟器 我的代码需要更改什么 class PhotoViewControl
  • 保留 std::set 或 std::unordered_set 上的插入顺序

    在将其标记为重复之前 我已经here https stackoverflow com questions 1098175 a stdmap that keep track of the order of insertion here htt
  • PDO bindColumn 和 PDO::FETCH_BOUND —— 强制还是可选?

    在我们的 PHP 代码的许多地方 如果重要的话可以使用 postgres 我们有这样的东西 q SELECT DISTINCT a id FROM alarms current a entities e installations i q
  • jQuery AJAX 响应设置 Cookie 标头

    我有一个使用 REST API 的项目 在这里 当我发送登录请求时 他们会以包含一些数据的 JSON 形式向我发送响应 与响应标头中的内容一起 Access Control Allow Origin Connection keep aliv
  • 在不同的元素上使用相同的控制器来引用同一个对象

    我想如果我打了一巴掌ng controller GeneralInfoCtrl 在我的 DOM 中的多个元素上 它们会共享相同的内容 scope 或者至少双向绑定不起作用 我想要这样做的原因是因为我在 HTML 的不同部分有不同的只读视图和
  • SVG 不从父级继承值

    所以这似乎是一个错误今天出现在 Chrome 中 显然还有 Firefox 我有一个 SVG 包裹在一个跨度内 我也尝试过 div 和对象标签 这似乎并不重要 并且该跨度具有指定的高度和宽度 昨天 子元素会根据其父元素的完整尺寸适当调整自身
  • 是否有一种算法可以从数组中提取二重奏中的值并对它们进行操作? [复制]

    这个问题在这里已经有答案了 我有一个像这样的数组 1 2 3 4 5 6 7 8 9 我想在二重唱中获得这样的项目 1 2 做一些操作 2 3 做一些操作 3 4 做一些操作 4 5 做一些操作 5 6 做一些操作 6 7 做一些操作 7
  • 从 Samsung Tizen TV 应用程序启动 AppStore

    我正在尝试在基于 Javascript 的 Tizen TV 应用程序中实现一个按钮 单击该按钮后 它应该打开另一个应用程序的 App Store 页面 我指的是这些文件 https developer tizen org sites de
  • UIWebView 日志消息 iOS 7 [重复]

    这个问题在这里已经有答案了 我正在开发一个使用网络浏览器的应用程序 在构建它后我收到了以下消息 UITextField webView called This method is no longer supported with the n
  • 如果模板尚未使用某种类型实例化,是否可能会触发编译器/链接器错误?

    后续问题 转换为指向模板的指针是否会实例化该模板 https stackoverflow com questions 8379002 does a casting to a pointer to a template instantiate
  • Vim:如何转到声明(类、方法、函数、变量等)

    现在我正在处理一个使用许多类 方法 函数 变量等的文件 是否可以转到所有这些的声明 请考虑到其中一些声明位于同一个文件中 但其他声明位于其他文件中 这些文件可能未打开 并且您不知道声明在哪里 但它们确实存在 如果声明在目录中为上一级 会发生
  • 在线性时间内旋转数组的算法

    如何旋转整数数组i使用次数swap仅在线性时间内起作用 您可以使用reverse 帮助器在线性时间内完成此操作 rotate array of size size by n positions void rotate int array i
  • Android 获取所有可用存储设备

    是否有任何功能 方法可以通过名称检测手机的各种不同存储空间 我的意思是检测所有内部 外部存储 如果您的设备上有多个可用存储 如何检测是否有可用的SD卡 提前致谢 我不知道其他类型的存储设备 我只知道Android的内部存储和外部存储设备 现
  • 如何使用不同元素的事件监听器管理不同的事件?

    document ready function var player 1 listener myVid 1 0 f player 1 listener addEvent ready ready var player 2 listener m
  • 如何在内存中保存位图

    跟进将位图资源存储在静态变量中 https stackoverflow com questions 8814455 storing a bitmap resource in a static variable 似乎存储一个静态引用andro
  • 更新查询结果错误

    我有一个名为company emp 在该表中 我有 6 列与员工相关 empid ename dob doj 我还有另一张桌子叫bday 我只有 2 列 恩皮德和多布 我有这样的疑问 select empid dob from compan
  • 显示带有故事板的一次性登录屏幕的最佳实践

    我在这里看到过类似的问题 但没有明确的答案 因此 我有一个模式登录视图 其中包含经典的用户名 密码表单 Facebook 登录按钮和注册按钮 我希望在用户第一次启动应用程序时显示这些按钮 据我发现 有两种方法可以实现这一点 但都有缺点 在