所以直到今天我还以为我了解了如何在 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];
}
(并且当然使用 VC1 作为 VC2 中的属性)
但在这种情况下,我想做类似 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 来检查,但是所有传递的数据都保持为空(而且我也不想使用 firstViewController *VC1 = [[firstViewController alloc] init];
在 didSelectRowAtIndexPath
中,因为感觉不对)
我希望上面的内容有点清楚,否则请告诉我。
最佳答案
我认为您刚刚遇到了忽略 MVC 的“M”部分的主要问题。
在这种复杂程度(或更早),我真的建议让您的数据模型成为一个独立的对象,可以作为单例访问或通过从您的应用委托(delegate)请求它。这样,每个 Controller 都可以在加载其 View 时获得所需的内容,而不是依赖参数传递和属性更新的巴洛克式链条。
关于ios - 使用 3 个 UITableviewcontroller 作为值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20905224/