使用 3 个 UITableviewcontrollers 作为值列表
Posted
技术标签:
【中文标题】使用 3 个 UITableviewcontrollers 作为值列表【英文标题】:Using 3 UITableviewcontrollers as a list of value 【发布时间】:2014-01-03 13:54:42 【问题描述】:所以我认为直到今天我才明白如何在 ViewController 之间传递数据。 我有 4 个 UITableViewControllers VC1、VC2、VC3 和 VC4。
在 VC1 中,您可以通过单击槽 VC2 到 VC4 来进行选择。 VC2、VC3 和 VC4 是相互关联的,所以如果您在 VC2 中选择 A,您只会看到 VC3 中与 A 相关的数据,依此类推。
如果你只有 2 个 VC,你通常会这样做:
SecondViewController *VC2 = [[SecondViewController alloc]init];
VC2.VC1 = self;
[self.navigationController pushViewController:svc animated:YES];
(当然在 VC2 中使用 VC1 作为属性)
但在这种情况下,我想做类似 VC4.VC1 而不是 VC2.VC1 的操作,但这没有任何意义,因为我需要从 VC2 到 VC3 再到 VC4 并在 VC1 中使用这些选定的值。 (在 VC1 中,我使用这些从 VC2、VC3 和 VC4 中选择的值,并添加一些附加信息并将其保存在单独的对象中。
我尝试像这样从 VC4 传回数据:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
firstViewController *VC1 = [[firstViewController alloc] init];
.....
[VC1 passSelectedVC2:CV2 selectedVC3:VC3 selectedVC4:VC4];
[self.navigationController popToRootViewControllerAnimated:YES];
....
但这不起作用。我在passSelectedVC2
方法中添加了NSLOG 来检查,但是所有传递的数据都保持为空(我也不想在didSelectRowAtIndexPath
中使用firstViewController *VC1 = [[firstViewController alloc] init];
,因为它感觉不对)
我希望上面说的有点清楚,否则请告诉我。
【问题讨论】:
你不能那样做。您正在实例化一个全新的 VC1,而不是导航堆栈中的那个。而是从堆栈中获取您的 VC1。[[self navigationController] viewControllers]
这是你的导航栈,通过数组索引选择你需要的vc。
嗨,所以使用这个我将使用实际的 VC 而不是创建一个新的?
【参考方案1】:
我认为您刚刚遇到了忽略 MVC 的“M”部分的主要问题。
在这个复杂程度(或更早),我真的建议让您的数据模型成为一个独立的对象,可以作为单例访问,或者从您的应用委托中请求它。这样一来,每个控制器都可以在加载视图时获得所需的信息,而不是依赖于巴洛克式的参数传递和属性更新链。
【讨论】:
嗨,它实际上是一个 MVCS。我正在使用 big nerd 牧场课程作为我的学习项目的基础。现在我想将此数据存储在带有附加信息的单独模型(对象)中,但首先我需要使用 VC2、VC3 和 VC4 选择数据。 (这些 VC 的设置是为了获取/显示相关数据)。也许我需要以不同的方式做到这一点,但我不知道如何。 在我看来,MVCS 是不必要的。它作为 (Ms)VC 更有意义,其中存储是模型内部的一个实现细节,它提供了一部分共享数据。【参考方案2】:改变firstViewController *VC1 = [[firstViewController alloc] init];
进入firstViewController *VC1 = [[[self navigationController] viewControllers]objectAtIndex:0];
解决了我的问题。
【讨论】:
以上是关于使用 3 个 UITableviewcontrollers 作为值列表的主要内容,如果未能解决你的问题,请参考以下文章
尽管 cellForRowAtIndexPath 返回有效单元格,但 UITableView 崩溃