在应用程序启动时从故事板中选择替代的第一个视图控制器

2023-11-27

我刚刚开始 iOS 编程,到目前为止,我在这里找到的教程和答案对我的前进有很大帮助。然而,这个特殊的问题整夜困扰着我,我找不到“感觉正确”的答案。

我正在编写一个连接到远程服务的应用程序,用户需要登录才能使用它。当他们开始使用应用程序时,他们的第一个视图应该是登录对话框;当他们之前进行身份验证时,他们会立即看到概述页面。

该项目使用故事板 - 我认为这是一个很棒的功能 - 因此大多数选择和加载根视图控制器的代码已经被处理。我认为添加逻辑的最佳位置是application:didFinishLaunchingWithOptions:的方法AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
      (NSDictionary *)launchOptions
{
    // select my root view controller here based on credentials present or not
    return YES;
}

但这带来了两个问题:

  1. 在这个特定的委托方法中,根视图控制器已经根据故事板被选择(并加载?)。我是否可以移动到加载过程中的较早位置来覆盖第一个视图控制器选择,或者这会使事情不必要地复杂化?

  2. 要覆盖第一个视图控制器,我需要对故事板的引用,但我找不到比使用更好的方法storyboardWithName:bundle:的构造函数UIStoryboard。这感觉不对,应用程序应该已经有对故事板的引用,但是我如何访问它?

Update

我解决了遇到的第二个问题,因为我在这里找到了答案:

UIStoryboard:获取活动故事板的正确方法是什么?

NSBundle *bundle = [NSBundle mainBundle];
NSString *sbFile = [bundle objectForInfoDictionaryKey:@"UIMainStoryboardFile"];
UIStoryboard *sb = [UIStoryboard storyboardWithName:sbFile bundle:bundle];

以上将创建一个新的故事板实例;要获取活动实例,要简单得多:

UIStoryboard *sb = [[self.window rootViewController] storyboard];

在故事板文件本身中,您必须为要加载的视图设置一个标识符,例如LoginDialog。然后你像这样实例化视图:

LoginViewController *login = [sb instantiateViewControllerWithIdentifier:@"LoginDialog"];
[self.window setRootViewController:login];

在另一个视图控制器中,以下内容就足够了:

UIStoryboard *sb = self.storyboard;
LoginViewController *login = [sb instantiateViewControllerWithIdentifier:@"LoginDialog"];
[self presentViewController:login animated:NO completion:nil];

您只需重置窗口的根视图控制器即可

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
      (NSDictionary *)launchOptions
{
   if(your_condition) {
       UIViewController *newRoot = [your implementation];
       self.window.rootViewController = newRoot;
   }
   return YES;
}

这对我有用,Xcode5.0.1

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

在应用程序启动时从故事板中选择替代的第一个视图控制器 的相关文章

  • 应用程序仅启用纵向,但 UIImagePickerController 在 iOS6 中旋转

    请注意 下面的答案 不适用于 iOS6 所以我仍然需要答案 我的应用程序仅启用纵向模式 但是 如果我将 UIImagePickerController 作为子视图嵌入其中 并旋转设备 则顶部和底部栏将保持在同一位置 但 UIImagePic
  • AGVTool new-version 和 What-version 不对应

    当我做 agvtool new version all 99 它更新我的 Info plist 文件 但是 如果我这样做 agvtool what version or agvtool next version 我收到此错误 There d
  • iOS 开发:如何强制 UIWebView 加载 Facebook 的非移动版本?

    我正在深入研究 iOS 开发 当我尝试在 UIWebView 中加载特定的 Facebook 粉丝页面时 它会加载该网站的移动版本 该版本仅加载粉丝页面的墙 而不是我需要加载的特定选项卡 在我的应用程序的 iPad 版本中 UIWebVie
  • 是否所有新应用程序都必须在 iPad 上运行才能通过应用程序商店审批流程? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我的一个朋友告诉我 有一个新的规则可以通过应用商店的审批流程 该应用程序还必须在 iPad 上运行 否则会被拒绝 我没有找到任何支持他说法的东西
  • 如何从地址簿中获取一个人的电话号码?

    我想做的就是让用户从地址簿中选择一个号码 我在这个问题中找到了代码 如何从地址簿联系人获取电话号码 iphone sdk https stackoverflow com questions 286207 how to get a phone
  • 在 iOS 上创建 Excel XLS 文件

    我正在尝试创建 Excel 格式的报告 准备通过电子邮件发送 到目前为止 我发现最好 最简单的方法是创建一个 xml 文档 如下所示 并将其另存为 xls
  • Cocos2D中如何让物体对触摸做出反应?

    好吧 我开始更多地了解 Coco2D 但我有点沮丧 我发现的很多教程都是针对过时版本的代码 因此当我浏览并了解它们如何执行某些操作时 我无法将其翻译成我自己的程序 因为很多都发生了变化 话虽如此 我正在使用最新版本的 Coco2d 版本 0
  • 从 .Plist 加载数组

    我正在尝试从 Plist 中的数组加载数组 但它不起作用 该 plist 看起来像这样 这是我正在使用的代码 NSString path NSBundle mainBundle pathForResource DiseaseProperty
  • OCUnit 无法识别导入的文件

    我正在我的 iPhone 应用程序上使用 XCode 3 2 3 和 iOS 4 0 上的 OCUnit 进行单元测试 我已成功设置测试环境以适当地通过和失败基本测试 但是当我导入自己的文件 在本例中为 UserAccount h 时 它无
  • iOS 应用程序中的屏幕共享? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想与运行相同应用程序的其他设备共享
  • 在表中滚动时,“EXC_BAD_ACCESS”、“-[CFString release]:发送到已释放实例的消息”

    滚动时出现以下错误UITableview EXC BAD ACCESS CFString keep 发送到已释放实例的消息 我怎样才能找到已解除分配的实例 这是我的 noOfRowsinsection 代码 for int i 0 i
  • 如何禁用出现在 UITabBarController 的“更多”部分中的编辑按钮?

    在我的应用程序中 基于选项卡栏应用程序 XCode 模板 我使用 UITabBarController 来显示用户可以访问的应用程序不同部分的列表 默认情况下 当项目超过 5 个时 UITabBarController 会在选项卡栏中显示
  • 当我收到推送通知时如何重新加载表格视图?

    我有一个 iPhone 应用程序 我要在其中添加推送通知 当我收到推送通知时 我需要转到一个特定的视图 在该视图中 我在调用后加载表视图网络服务 http en wikipedia org wiki Web service这里 问题是当我站
  • 配置文件与应用程序标识符不匹配

    我刚刚为应用程序 ID 49776ZQRBG com gfeed ride 创建了一个 AdHoc 分发配置文件 我在 info plist 中将 Bundle ID 设置为此 但项目设置中的此配置文件显示为灰色并显示 配置文件与应用程序标
  • XCode iPhone 项目中目标所有配置的通用预处理器宏

    我的应用程序的每个目标通常有四种配置 调试 发布 分发 临时 有没有办法为所有 4 个添加一个通用宏 同时不破坏我到目前为止设置的宏 您在编辑器中看到 多个值 提前致谢 奥比旺 在前缀头文件中定义宏 将包含在所有源文件中
  • 如何将Table View中的导航栏设置到顶部?

    如何将导航栏设置为情节提要界面生成器中表格视图的顶部 是否可以 如果我将导航栏添加到我的表视图中 我只会将其放在我的记录下 我正在使用 Xcode 4 3 2 您不应该自己添加导航栏 当场景嵌入到导航控制器或导航堆栈的一部分中时 界面构建器
  • 训练 tesseract 与 iPhone 一起使用

    我正在尝试在我的 iPhone 应用程序中使用 tesseract 2 04 只想检测数字 我在这里所做的首先是使用这篇文章交叉编译 tesseract 以生成 lib 文件http robertcarlsen net 2009 07 15
  • iPhone存储然后从Documents文件夹中读取文件

    这一定很容易 但我想将一个文件放在 文档 文件夹中 该文件在启动时读入 我有关于如何阅读的代码 并已确认其在正确的目录中查找 但是 当我保存在 xcode 中的 Resources 文件夹中时 我的文件 RootList txt 存储在 R
  • iOS 5 核心数据冻结

    我尝试做以下简单的事情 NSArray entities context executeFetchRequest inFetchRequest error fetchError 没有什么花哨 但这在 iOS 5 中冻结 在 iOS 4 中工
  • 有没有用于iPhone开发的高级手势库?

    iPhone 平台有许多常见的手势习惯用法 例如 有轻击 捏合和滑动等操作 每种操作都需要不同数量的手指 但是 当您开发应用程序时 您需要根据有关触摸次数和位置的低级信息来实现这些内容 看起来这是图书馆的主要候选者 您将注册一个委托 设置一

随机推荐

  • 在ios中使用查询字符串创建NSURLRequest

    我在 ios 中创建了一个用户查询表单 我使用 php 作为服务器端 我在 IOS 中构造了如下所示的查询字符串 http www mydomain in androidmail enquiry php name Vinoth Kumar
  • 如何将包含单引号的字符串保存到 PostgreSQL 中的文本列

    我在 Smartwcm Web 应用程序 SDK 中使用 hibernate 和 PostgreSQL 作为数据库 我在其中一个表中有一个字段 其数据类型是文本 当我尝试使用 hibernate 使用相应的 POJO 将值插入表中时 如果我
  • 无法使用 VS 2013 RTM 编译 OpenCV 2.4.5

    有人用 VS 2013 RTM 编译过 openCV 吗 我尝试在 IlmImf 模块中获取一堆 min 不属于命名空间 std max 不属于命名空间 std 并且 opencv features2d 无法编译并出现以下错误 opencv
  • 如何设置
    元素的箭头样式?

    我正在使用这段代码 另请参阅JSFiddle 以更改悬停时箭头的背景颜色 但是 这不起作用 因为箭头仅在单击时更改其颜色 summary webkit details marker color B6B6B6 font size 20px m
  • ClassInitialize 中生成的数据驱动测试:不再在 Visual Studio 2012 中工作

    我已从 Visual Studio 2010 升级到 Visual Studio 2012 在我的单元测试项目中 我有一个 ClassInitialize 方法 它生成一个 CSV 文件 然后使用连接到 CSV 的 DataSource 将
  • 数据库如何自动生成唯一标识符?

    我有一个带有 id guid 列的 sql 表 如何强制数据库为每条新记录自动生成新的 guid Add DEFAULT newid
  • Global.asax 中的 ASP.NET 路由

    我试图通过以下方式在我的 Web 表单应用程序中添加一条路线 http msdn microsoft com en us library cc668201 aspx adding routes to a web forms applicat
  • faces-redirect 和后退按钮导致其他链接无法正常工作

    我有一个关于面孔导航的问题 所以我有一个页面 它采用请求参数来加载特定用户 此页面显示 commandLink 列表 单击该列表后 将使用隐式导航重定向到另一个页面 通过调用 preRenderView 中的方法来加载用户 我们重定向到的页
  • 如何将协作者添加到 Firebase 应用程序?

    在最新版本的Firebase 在 Google I O 2016 期间宣布 如何将我想要的其他人添加到我的项目或应用程序中collaborate和 我通过以下途径认识了 IAM 角色Settings gt Permissions 这是正确的
  • Bootstrap Tour 不记得我离开的地方

    当我到达第二页时 我在多页游览中启动 Bootstrap Tour 时遇到问题 我以点击事件开始游览localStorage被设定为false 游览从单击事件开始正常 但是当我转到游览的第二步并加载新页面时 游览不会从中断处继续 如何在这个
  • 使 WCHAR 为空终止

    我有这个 WCHAR 文件名 1 作为函数的返回值 它是 sys 32 函数 因此我无法更改返回的类型 我需要使 fileName 以 null 结尾 因此我尝试将 0 附加到它 但似乎没有任何效果 一旦我得到一个以 null 结尾的 WC
  • Jasper Reports 使用 comparatorExpression 进行交叉表排序

    我正在尝试根据某些自定义方案对交叉表中的动态列进行排序 在文档中 我发现提到了comparatorExpression 交叉表组存储桶比较器表达式 这个表达式的结果是 用于按升序或降序对存储桶进行排序 如果没有比较器 指定表达式时 将使用自
  • 创建/更新文档日期的摄取管道

    我正在尝试实现类似于 Mysql 的行为 为我通过 ES 管道索引的每个文档的元数据添加 insert at updated at 我的管道是这样的 description Adds createdAt and updatedAt styl
  • 如何访问和处理嵌套对象、数组或 JSON?

    我有一个包含对象和数组的嵌套数据结构 如何提取信息 即访问特定或多个值 或键 例如 var data code 42 items id 1 name foo id 2 name bar 我怎样才能访问name中的第二项items 预赛 Ja
  • 如何使用 C# 从 MS Office 文档中提取文本

    我试图使用 C 从 MS Word doc docx Excel 和 Powerpoint 中提取文本 字符串 在哪里可以找到免费且简单的 Net 库来阅读 MS Office 文档 我尝试使用 NPOI 但没有获得有关如何使用 NPOI
  • 为什么 printf("%f",0);给出未定义的行为?

    该声明 printf f n 0 0f 打印 0 然而 该声明 printf f n 0 打印随机值 我意识到我表现出了某种未定义的行为 但我无法具体弄清楚为什么 所有位均为 0 的浮点值仍然有效float值为 0 float and in
  • 为什么我的 WSDL 仍然显示带有 http 位置值的基本 http 绑定?

    我启用了 https 绑定 但我的 WSDL 的肥皂地址为 http 有什么想法吗 谢谢
  • 糟糕的 DotNetNuke 性能

    我参与了一个项目 使用DotNetNuke 版本 05 01 04 社区版 我们正在使用它构建新的 Intranet 但性能很糟糕 我们有五个人向其添加页面和内容 每 15 30 秒一次他们经历了 10 秒的停顿或在系统继续并加载下一个屏幕
  • libgmalloc 如何与二级命名空间一起工作?

    我想编写自己的 malloc free 函数以进行调试 文档说我必须将 DYLD FORCE FLAT NAMESPACE 与 DYLD INSERT LIBRARIES 一起使用 但同时libgmalloc文章明确指出 libgmallo
  • 在应用程序启动时从故事板中选择替代的第一个视图控制器

    我刚刚开始 iOS 编程 到目前为止 我在这里找到的教程和答案对我的前进有很大帮助 然而 这个特殊的问题整夜困扰着我 我找不到 感觉正确 的答案 我正在编写一个连接到远程服务的应用程序 用户需要登录才能使用它 当他们开始使用应用程序时 他们