ios - 如何在另一个选项卡的 View Controller 中为协议(protocol)设置委托(delegate)?

标签 ios model-view-controller delegates protocols

我想要一些专业的 MVC 设计反馈:

我有一个带有 2 个选项卡的 UITabBarController,每个选项卡都指向一个带有一堆 VC 的导航 Controller 。

第一个选项卡路径上的最后一个 View Controller 将显示图像。我希望将该图像存储在表格中,并在选择第二个选项卡时随时查看。

如何将此图像从第一个选项卡 -> NaVController->last VC(图像 VC)发送到第二个选项卡 -> NavController->table VC?

我有几个选择:

1- 在 tableVC 中创建一个类方法,让 imageVC 调用该类方法并将要保存的图像直接传递到用户默认值中。这似乎违背了 MVC

2- 使用方法和委托(delegate)属性在 imageVC 中创建一个协议(protocol),并让表 VC 采用该方法将图像保存在数组中。这里的问题是设置委托(delegate)的唯一地方是在 ViewDidLoad 中:

[[[[self.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:1] setDelegate:self];

这里的问题是,如果用户从一开始就选择了第二个选项卡,应用程序将会崩溃,因为显然 viewControllers 还没有加载到第一个选项卡的导航堆栈上。同样,如果用户先看到一张图片,然后选择第二个选项卡,它将执行并设置委托(delegate),但不会保存第一个选择的图片。

一定有更简单的方法......

提前致谢 知识库

最佳答案

我认为您应该将数据模型与 View Controller 进一步分开。按照 MVC 方法,模型不应该知道它是如何表示的。因此,对 ImageVC 中的模型进行更改不应涉及对任何其他 VC 的直接调用。

我会创建一个单独的实体,例如SelectedImages,并将ImageVC中的图像添加到其中,并在需要显示自身时从中读取TableVCSelectedImages 可以是应用委托(delegate)中的属性、核心数据实体、单例类或类似的东西。

关于ios - 如何在另一个选项卡的 View Controller 中为协议(protocol)设置委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11350489/

相关文章:

iOS 用户界面测试 : Get image filename (Swift)

objective-c - 当前 View Controller 显示黑屏

spring.view.prefix : not being applied to simple view name in Spring Boot

javascript - 使用 tr.remove() 删除 HTML 表格的行,提交按钮只发回它上面的行而不是下面的行

ios - 从类文件初始化委托(delegate)

c# - 什么是 Func,如何以及何时使用

swift - textShouldEndEditing 不适用于步进器

ios - 将 UIPopover 正确放置在动态按钮旁边

ios - 如何舍入 CGFloat

iOS 7 : Custom container view controller and content inset