通过视图控制器、标签栏控制器、导航控制器传递数据并传递到视图控制器

2023-12-01

这可能是非常容易实现的事情,但我是 iOS 编程新手,而且我似乎陷入了困境。

所以,基本上,我有一个选项卡式应用程序。我决定除了标签栏之外还需要一个导航栏。为此,我放置了选项卡栏控制器,然后添加了视图控制器并嵌入到每个视图控制器的导航控制器中,然后将其连接到选项卡栏。

我在故事板中的层次结构看起来有点像这样:

  1. View Controller
    1. Tab Bar Controller
      1. Navigation Controller
        1. 视图控制器
      2. Navigation Controller
        1. 视图控制器

我被困在这里的部分是当尝试将数据从第一个视图控制器传递到任何其他视图控制器时。在添加导航控制器之前,我使用prepareForSegue方法来传递数据,如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"logged"])
    {
        UITabBarController *tabar=segue.destinationViewController;
        SecondViewController *svc=[tabar.viewControllers objectAtIndex:1];
        svc.groupArray = [(NSArray*)sender objectAtIndex:0];
        svc.userArray = [(NSArray*)sender objectAtIndex:1];
        svc.taskArray = [(NSMutableArray*)sender objectAtIndex:2];
        svc.selfArray = [(NSMutableArray*)sender objectAtIndex:3];
        [tabar setSelectedIndex:1];
    }
}

正如您所看到的,我将数据传递到第二个视图控制器,并使用 PerformSegueWithIdentifier 方法将选项卡栏索引设置为 1,因为我希望打开第二个页面。所有这些都工作得很好,直到我将导航控制器引入到我的代码中,因为我想要导航栏。那时一切都崩溃了。如果我尝试按原样运行代码,应用程序将崩溃并在控制台中显示以下输出:

[UINavigationController setGroupArray:]:发送到的无法识别的选择器 实例0x7ffa6acec620

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UINavigationController setGroupArray:]:无法识别的选择器发送到实例 0x7ffa6acec620”

我尝试过稍微修改一下代码,但似乎没有任何效果。我只是很困惑,也许正确方向的提示会对我有所帮助。


由于您将视图控制器嵌入到导航控制器中,因此它们不再是选项卡栏的直接子级;但是,您将选项卡栏控制器的子级强制转换为导航控制器以外的其他控制器。您想要首先获取导航控制器(它是选项卡栏控制器的子级),然后获取该导航控制器的子级。这将是您的视图控制器。然后您可以为此设置数据。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"logged"])
   {
       UITabBarController *tabar=segue.destinationViewController;
       UINavigationController *navController = [tabbar.viewControllers objectAtIndex:1];
       SecondViewController *svc=[navController.viewControllers objectAtIndex:0];
       svc.groupArray = [(NSArray*)sender objectAtIndex:0];
       svc.userArray = [(NSArray*)sender objectAtIndex:1];
       svc.taskArray = [(NSMutableArray*)sender objectAtIndex:2];
       svc.selfArray = [(NSMutableArray*)sender objectAtIndex:3];
       [tabar setSelectedIndex:1];
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过视图控制器、标签栏控制器、导航控制器传递数据并传递到视图控制器 的相关文章

  • 是否可以在 Objective-C 中调用 Swift 便利初始化器

    假设我在 Swift 中有一个方便的初始化器 extension UIImage convenience init bundleNamed name String let bundle NSBundle forClass Foo self
  • 如何在 Xcode 8 中更改应用程序显示名称以添加空格

    我试图在 Xcode 8 中的应用程序名称 独立贴纸包 中添加一个空格 我在这里看到的解决方案是更改产品名称 在包装中 或更改 捆绑显示名称 我更改了产品名称 但没有起作用 我清理 重建 重置模拟器中的内容和设置 并注销 xcode 重新登
  • 为什么一个崩溃日志具有象征意义,而不是另一个?

    我在 XCode Organizer 中有两个来自 iPhone 应用程序的崩溃日志 两者相隔 20 分钟内发生 在同一台设备上运行相同版本的应用程序 其中一个已被象征化 而另一个则没有 无符号日志具有类型和代码 Exception Typ
  • Phonegap Cordova Statusbar 插件创建双栏

    我正在开发一个使用phonegap 的应用程序 通过 CLI 构建 而不是 PhoneGap 构建 我的 cordova plugin statusbar 插件有问题 打开时它将增加额外的条高度 这是它的样子 双高菜单栏 我通过两种方式实现
  • Xcode UI 测试 UIKeyInput typeText

    在 Xcode UI 测试期间 我该如何insertText for a UIView符合UIKeyInput 我创建了一个CodeInputView https github com acani CodeInputView符合UIKeyI
  • 从 UIScrollView 中删除所有子视图?

    如何从 UIScrollview 中删除所有子视图 Let scrollView是一个实例UIScrollView 在 Objective C 中 这非常简单 只需致电makeObjectsPerformSelector 像这样 Objec
  • 使用 Objective-C 获取 Photoshop 的动作列表

    我正在使用 C 和 Obj C 编写一个与 Photoshop 交互的 OSX 应用程序 我一直在使用NSAppleScript使用动态构建的 AppleScript 来驱动 Photoshop 是的 这有点可怕 我希望能够以不同的方式驱动
  • iPhone存储然后从Documents文件夹中读取文件

    这一定很容易 但我想将一个文件放在 文档 文件夹中 该文件在启动时读入 我有关于如何阅读的代码 并已确认其在正确的目录中查找 但是 当我保存在 xcode 中的 Resources 文件夹中时 我的文件 RootList txt 存储在 R
  • Objective-C 中可以创建私有财产吗?

    Objective C 中可以创建私有财产吗 我确实知道一种私有财产功能可以通过另一种方式实现 但我对特定问题感兴趣 谢谢 是的 可以 但是代码看起来有点奇怪 如果你打电话它只会给你一些警告 你必须自己检查警告 在您的实现文件 m 中 in
  • 以编程方式设置 UITabBarItem 标题?

    我的应用程序基于标签栏架构 为了有一个简单的国际化机制 我不在 XIB 文件中写入任何字符串 viewdidload 允许以编程方式更改视图中的字符串 当我的应用程序启动时 我可以看到 4 个选项卡 但实际上只有第一个加载其视图控制器 其他
  • iOS 4.2 - 打电话后返回应用程序

    我可以使用以下命令在我的应用程序中成功发起电话呼叫 UIApplication sharedApplication openURL NSURL URLWithString tel 123456789 但是 通话结束后是否可以自动返回应用程序
  • 正常运行时间 iOS Objective-C - 毫秒精度

    我正在努力争取 iOS 的正常运行时间 我正在使用 mach absolute time 但我发现它在睡眠期间暂停 我找到了这个片段 time t uptime struct timeval boottime int mib 2 CTL K
  • 在 UIView 中的贝塞尔曲线路径内像草图颜色一样绘制/绘制

    我正在 UIView 上的 UIBezierPath 的帮助下绘制形状图层 CAShapeLayer pathLayer CAShapeLayer layer pathLayer frame CGRectMake view frame or
  • Objective-C - ARC - NSNumber - 分段错误

    我有一个 Objective C 程序 并且正在使用 ARC 自动引用计数 它在第 23 行抛出分段错误 请参见下面的程序 Question1 为什么会出现分段错误 下面给出的是程序 import
  • 在iOS上模仿截图flash动画

    我正在寻找一种复制按 home lock 时播放的 闪烁 动画的方法 有谁知道这个动画是否可用 在 iOS 设备上 当您按下 home lock 并且屏幕闪烁白色时 您会截取屏幕截图 你说的是这个效果吗 如果是这样 请尝试以下操作 Add
  • 在 iOS 中对 Google 地图标记进行聚类

    我有一个基于地图的应用程序 使用 Google 地图的 iOS SDK 我需要在核心数据数据库中存储多达数千个项目 并在地图上用标记显示它们 出于性能和可用性的原因 我需要在用户缩小时对这些标记进行聚类 但我需要确保放置代表性标记 以便用户
  • 模态转换风格就像邮件应用程序中一样

    我试图实现模态呈现效果 其中呈现的视图仅部分覆盖父视图 如下图所示 我知道我可以通过使用实现自定义转换来实现这一点UIPresentationController 我不想重新发明轮子 所以在继续开发之前我想问一下 API 中是否有对这种转换
  • 使用 'vendored_frameworks' 和 'source_files' 对于 cocoapod 使用 'use_frameworks!'

    我正在构建一个 cocoapod 它基本上包含一个框架 私有源 和一个依赖于该框架的视图 开源 所有这些都是用 Objective C 制作的 在 podspec 中我有以下几行 spec vendored frameworks MyPod
  • iOS5 故事板错误:故事板在 iOS 4.3 及更早版本上不可用

    我使用故事板构建了一个小型应用程序 并且运行得很好 就在最终测试之前 我决定尝试一下它是否可以在 iOS 4 3 上运行 我点击项目设置中灰色的5 0 选择4 3 该应用程序无法构建 并显示以下错误消息 故事板在 iOS 4 3 及更早版本
  • 如何在 iOS 模拟器上打开开发者工具?

    我想打开开发者工具在 iOS 模拟器上 我在 2016 款 MacBook 上执行了以下步骤macOS 塞拉利昂 10 12 1并且不知道如何进一步 我已经安装了 Xcode 我创建了一个新的游乐场 右键单击 Xcode 停靠栏图标 然后单

随机推荐