改变 Swift 中的 VC 问题。如何在标签栏控制器的视图之间传递数据?

2023-11-25

我有四个 ViewController,我不使用 UITabbedbar,因为它更难以定制。 我使用模态转场,但我认为内存消耗过多。 这是我的第一个和第二个 VC 的屏幕截图。 我必须使用什么才能正确更改视图?

enter image description here


这就是我使用的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "second") {
        let secondVC = segue.destinationViewController as SecondViewController;


    }
}

从故事板图中可以清楚地看出,您已经创建了从“选项卡栏”中的每个按钮到另一个视图控制器的 Segue。除了放松继续,segues 总是创建它们要切换到的视图控制器的新实例。因此,如果您使用设置从视图控制器 1 切换到视图控制器 2,然后返回视图控制器 1,您将不会返回到原来的视图控制器,而是将创建一个全新的视图控制器 1。

这就是你的内存消耗过多的原因。您不断创建视图控制器,直到您的应用程序崩溃。

我建议您重新使用标签栏控制器。它们被设计为预先分配视图控制器一次,然后在它们之间切换。此外,它们具有标准外观是有原因的,它可以帮助您的应用程序的用户立即知道如何与它们交互。


要在选项卡之间传递数据,您不会使用 Segue,因为切换选项卡时不会发生 Segue。有很多方法可以做到这一点,但它们都归结为将模型数据存储在所有选项卡都可以访问的位置。这可以通过以下方式完成CoreData在更大的应用程序中。对于一个简单的应用程序,您可以执行以下操作:

  1. 创建一个自定义子类UITabBarController。我们就这样称呼它吧CustomTabBarController。让该类创建并保存每个选项卡将访问的模型数据。

    自定义 TabBarController.swift:

    import UIKit
    
    // This class holds the data for my model.
    class ModelData {
        var name = "Fred"
        var age = 50
    }
    
    class CustomTabBarController: UITabBarController {
    
        // Instantiate the one copy of the model data that will be accessed
        // by all of the tabs.
        var model = ModelData()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Do any additional setup after loading the view.
        }
    }
    
  2. 在 Storyboard 的 Identity Inspector 中,更改UITabBarController to CustomTabBarController.

    enter image description here

  3. In viewWillAppear在每个选项卡中,获取对模型数据的引用,然后就可以使用它。

    第一个 ViewController.swift:

    import UIKit
    
    class FirstViewController: UIViewController {
    
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
    
            // Get a reference to the model data from the custom tab bar controller.
            let model = (self.tabBarController as! CustomTabBarController).model
    
            // Show that we can access and update the model data from the first tab.
            // Let's just increase the age each time this tab appears and assign
            // a random name.
            model.age += 1
    
            let names = ["Larry", "Curly", "Moe"]
            model.name = names[Int(arc4random_uniform(UInt32(names.count)))]
        }
    
    }
    

    SecondViewController.swift:

    import UIKit
    
    class SecondViewController: UIViewController {
        @IBOutlet weak var nameLabel: UILabel!
        @IBOutlet weak var ageLabel: UILabel!
    
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
    
            // Get a reference to the model data from the custom tab bar controller.
            let model = (self.tabBarController as! CustomTabBarController).model
    
            // This tab will simply access the data and display it when the view
            // appears.
            nameLabel.text = model.name
            ageLabel.text = "\(model.age)"
        }
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

改变 Swift 中的 VC 问题。如何在标签栏控制器的视图之间传递数据? 的相关文章

  • 外围 BLE 设备的唯一标识符

    所以我有外围设备BLE设备 我需要一些标识符以便稍后与另一部 iPhone 共享 我连接的示例iPhone A 为外围设备 iPhone A 将外围设备的标识符保存到数据库中 稍后我可以轻松获取iPhone B 并连接到通过该标识符找到的外
  • iOS 应用程序中的谷歌地图实时交通状况?

    如何使用 google 地图 sdk 或 api 在 ios 应用程序中添加当前交通状况 如下图所示 有 javascript api 但我没有找到任何适用于 iOS 应用程序的解决方案 只需在 iOS SDK 中添加一行代码即可启用或禁用
  • 平板电脑在第一次单击时悬停,在第二次单击时单击

    发布这个问题主要是希望证实我对该行为的怀疑 从而为其他程序员记录下来 因为我在网上没有找到任何记录 我正在构建一个网站 其导航栏具有以下属性 水平截面是 ul of li 和一些 li li s 两者都有 A n a 元素带您进入该主题 触
  • 如何避免父ScrollView裁剪内部ScrollView?

    When a horizontal child ScrollView is nested inside a vertical parent ScrollView internal element is clipped by parent S
  • 为什么快速枚举中的可选项会导致无限循环?

    评估以下代码 我希望打印一次Hello World 相反 它会导致无限循环 有人可以解释为什么吗 let array what for text String in array print Hello World 删除可选的 显然让它只打印
  • Swift NotificationCenter 删除观察者最快的方法

    我正在添加一些观察员viewController applicationWillResignActive applicationDidEnterBackground 以及许多其他人 我想删除self作为一行中所有已注册通知的观察者 我的问题
  • XC测试元组

    我正在尝试构建一个单元测试 如下所示 region is a Double Double tuple XCTAssertEqual region 0 0 200 0 但 Xcode 给我一个错误 Cannot invoke XCTAsser
  • 将 HTML 字符串加载到 UIWebView 中的延迟

    我在导航控制器中有两个视图控制器 第一个视图控制器有一个带有按钮的菜单 按下此按钮将移动到第二个视图控制器并将 html 字符串加载到 UIWebView 中 没有其他东西被加载到 webview 中 只是一个简单的 NSString 其中
  • iOS 复合谓词

    我正在编写一个具有照片数据库的应用程序 每张照片都有多个与之关联的标签 并且该应用程序有一个带有大量切换的搜索页面 允许用户仅根据他们感兴趣的标签搜索照片 每个标签都存储了integerID 是因为它们对应于外部数据库的 ID 所以我尝试简
  • 在 iPhone 和 Cocos2d 中从类类型(+)方法访问对象?

    我有一个类方法 在其中创建并返回类对象 但我想访问同一类中该对象的某些属性 作为一个类方法 我无法在 h 文件中声明该变量 然后在其他方法中访问它 以下是代码 我如何在下面的实例方法中访问 backsprite 或 hudlayer 对象的
  • 包含字符串和数字的数组

    在 Objective C 中 很容易创建一个异构数组 如下所示 NSArray myArray String1 String2 123 456 有什么方法可以快速创建这样的数组吗 如果是的话怎么办 Note 我在 swift 中尝试了类似
  • 使用导航控制器在 Storyboard 中呈现视图控制器 - Swift

    我目前在下面的新故事板中显示了一个 viewController var storyboard UIStoryboard UIStoryboard name AccountStoryboard bundle nil var vc Welco
  • Facebook 登录 Apple CNA

    问题 是否可以设置 Facebook 登录以在 CNA 中使用 是否为开发人员提供 CNA 文档 您可以使用任何开发人员工具调试 CNA 屏幕吗 Details 我创建了一个使用电子邮件提交表单或 Facebook 登录按钮的强制门户登录页
  • 为什么 iOS 5.0 不喜欢纯窗口应用程序?为什么它要求使用视图控制器?

    我有一个使用 Xcode 4 0 的 基于窗口的应用程序 模板创建的 iOS 应用程序 当时运行良好 并且使用的是 iOS 4 3 SDK 这是一个简单地将按钮 标签等直接放置到窗口上的应用程序 没有视图控制器 什么都没有 但现在我已经升级
  • SDWebImage 显示缓存中图像的占位符

    在 iOS 5 1 项目 iPad 中使用 SDWebImage 3 我们展示相当大的图像 700x500 并且我们有很多图像 1000 我们预取图像并缓存到磁盘 然后允许用户浏览它们 效果很好 除了当您浏览图像时 您总是会看到占位符显示一
  • 带约束的 Swift 动画

    是否可以通过改变约束来制作 UIView 动画 基本上 我想要动画myv UIView 具有 x y 高度和宽度约束 使用 UIView animateWithDuration 1 5 通过改变旧的限制 是的 这是可能的 你可以这样做 fu
  • iOS:addConstraints:应用程序崩溃

    Problem 我似乎无法在现有项目中采用自动布局 Details 我之前也遇到过与此问题相同的问题presentViewController 在 iOS 但所提供的答案都不是我的解决方案 我正在使用所有没有 xib 的故事板视图 我的 使
  • Apple Mach-O 链接器错误 armv7s 和 libGoogleAdMobAds.a

    我刚刚升级了我的应用程序以在新的 iPhone5 模拟器上运行 但是当我尝试为我的 iPhone 4S 设备构建它时 我收到此 Apple Mach O Liner 错误 ld 文件是通用的 3片 但不包含 n armv7s 切片 User
  • AVAudioMixerNode pan 或 AVAudioUnitSamplerstereoPan 属性无法更改 AVAudioEngine 声音输出的左/右平衡

    我有以下代码 它播放单个 MIDI 音符 但我希望能够调整平衡 平移 以便它仅从左扬声器或右扬声器或某些组合中播放 我认为更改 sampler stereoPan 或 engine mainMixerNode pan 也许可以解决问题 但它
  • 在应用程序内启用或禁用 Iphone 推送通知

    我有一个 iPhone 应用程序 可以接收推送通知 目前 我可以通过转到 iPhone 设置 通知来禁用我的应用程序的推送通知 但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知 这是可以做到的 因为我在 foursquare i

随机推荐

  • 显式使用“new EventHandler”声明有好处吗?

    将事件处理程序分配给上下文之类的东西MenuItem 例如 有两种可接受的语法 MenuItem item new MenuItem Open Image btnOpenImage Click 和 MenuItem item new Men
  • MinGW中有fmemopen()吗

    我正在尝试编译一些使用fmemopenMinGW 中的函数 我发现MinGW没有这个功能 我需要一个相当于fmemopen 我可以使用其他功能吗 由于内核中缺少功能 win32 上没有 fmemopen 等效项 我认为 cygwin 使用如
  • 无法解析符号 DaggerApplicationComponent

    我将 Dagger2 与 java 一起使用 并收到 无法解析应用程序中的符号 DaggerApplicationComponent 错误 依赖关系似乎有问题 任何帮助将非常感激 我的完整代码在这里 https github com roh
  • 如何强制 to_yaml 以文字块样式输出长字符串?

    我在哈希中有很长的字符串值 我想以文字块样式打印 以 gt or 在 YAML 中 而不是作为内联字符串 有没有办法在调用时强制执行此操作 to yaml 文字块样式的示例 this Foo Bar None
  • 错误:无法将 typeid 与 -fno-rtti 一起使用

    当我尝试编译我的项目时 我收到此消息 Cannot use typeid with fno rtti 我正在使用 opencv 框架 我用谷歌搜索了这个问题 但是 我在互联网上发现的错误似乎与我的问题无关 我不知道问题是否与包含 代码或编译
  • Qt:Qt 类与标准 C++

    标准 c 和 Qt 之间存在大量重复功能 在某些时候 这似乎合乎逻辑 但很多时候却显得愚蠢 就像我想尝试一种新的编程语言 学习我已经知道的东西 例如使用 QFile 另外 如果我全部用 Qt 方式完成 并且假设现在我想移出 Qt 框架 那么
  • SQLAlchemy,获取未绑定到会话的对象

    我试图从数据库中获取对象集合并将其传递给未连接到数据库的另一个进程 我的代码如下所示 但我不断收到 sqlalchemy exc UnboundExecutionError Instance
  • 控件中的嵌入表单或作为用户控件的表单

    好吧 我有一个大型 CRUD 应用程序 它使用嵌入了表单的选项卡 如下所示 gt public static void ShowFormInContainerControl Control ctl Form frm frm TopLevel
  • 在 DocumentDB 上使用 Any 进行子集合的 LINQ 查询问题

    使用 v1 8 Net SDK 尝试返回 Sales 其中 Sales 客户端数组包含我正在查找的客户端 ID Sales Where sale gt sale Clients Any c gt c ClientId clientID 返回
  • 同步特征是发送特征的严格子集吗?什么实现了不发送同步?

    In Rust 编程 第二版 作者 吉姆 布兰迪 杰森 奥伦多夫 利奥诺拉 F S 廷德尔第 520 页上有一个图表 显示发送和同步 并带有重叠的圆圈 其中同步完全包含在发送中 这让我相信所有实现同步的东西也必须实现发送 但是第 561 页
  • 为什么我不应该从构造函数中调用我的依赖项?

    长期以来 我一直认为从构造函数中调用类依赖项是一种不好的做法 但昨天无法向同事阐明原因 谁能提供一个不这样做的充分理由 尼古拉 马洛维奇的原因有几个国际奥委会第四定律 当我们使用构造函数注入编写应用程序时 我们经常创建大量的对象图 并且我们
  • iOS:tableView.reloadData() 无法快速工作

    我试图在 Swift 中更新数据后重新加载表视图 但它似乎不起作用 当我更改选项卡并返回时 表视图会重新加载 但不会自动加载 这是我的代码 override func viewDidLoad super viewDidLoad some c
  • 在棒棒糖版本上方的Notification中设置小图标

    我已经创建了抬头通知 就像下面这样 NotificationCompat Builder notification new NotificationCompat Builder this channelId setContentTitle
  • 八度导入函数

    我正在八度运行 matlab 代码 我猜 核心八度音阶中没有实现导入功能 知道如何在八度音程中使用这个 matlabe 函数吗 这是我所拥有的 Octave 3 4 0 7 gt 设置 导入包 brml 警告 Octave 中尚未实现 导入
  • 如何在Cakephp中检索Ajax发送的数据?

    我被这个问题困扰了一整天 我想做的是使用 Ajax 将 2 个值从视图发送到控制器 这是我的代码hot products view
  • Amazon S3 为每个对象创建唯一的密钥

    我的应用程序用户将他们的文件上传到一个存储桶 如何确保 S3 存储桶中的每个对象都有唯一的密钥以防止对象被覆盖 目前 在将文件发送到 S3 之前 我正在使用 php 脚本中的随机字符串对文件名进行加密 为了便于讨论 我们假设上传者找到了一种
  • 如何使用jquery检查多个复选框?

    我是 jquery 的新手 它很有趣 但我遇到了一个小问题 我使用 foreach 循环从数据库填充多个复选框 如下所示
  • 按组连接字符串

    我想按以下方式对记录进行分组 id并通过组合创建一个字符串client id values 以下是我的文档示例 id ObjectId 59e955e633d64c81875bfd2f tag id 1 client id 10001 id
  • 在 ggplot 中绘制一个简单的转换漏斗图

    我有一个简单的数据框 如下所示 df steps numbers rate 1 clicks 332835 100 000000 2 signup 157697 47 379933 3 cart 29866 8 973215 4 buys
  • 改变 Swift 中的 VC 问题。如何在标签栏控制器的视图之间传递数据?

    我有四个 ViewController 我不使用 UITabbedbar 因为它更难以定制 我使用模态转场 但我认为内存消耗过多 这是我的第一个和第二个 VC 的屏幕截图 我必须使用什么才能正确更改视图 这就是我使用的代码 override