在堆叠视图之间传递数据

Posted

技术标签:

【中文标题】在堆叠视图之间传递数据【英文标题】:Passing data between stacked views 【发布时间】:2011-03-12 12:40:01 【问题描述】:

在我的应用程序中,我有几个视图......其中一些视图是使用导航控制器推送和弹出的。 In some view, I have a table view, in which each one of its cells is a view itself, so when the cell is selected, this code is executed :

DetailView *detailViewController = [[Detailview alloc] initWithNibName:@"Detailview" bundle:nil];
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];

在详细视图中,当单击特定按钮(例如后退/取消按钮)时,将执行此代码:

[self.navigationController popViewControllerAnimated:YES];

我想要的是将数据从详细视图传递到它之前的视图(初始化它的视图)。到目前为止,我已经实现了一个名为“Globals.h”的类,我在其中放置了我想要传递的数据,并在这些数据变量上使用了“extern”以确保它对许多类都是全局的,并且它有效适当地。但我不认为这是这样做的适当方式。还有其他好的方法吗?

提前致谢:)

【问题讨论】:

【参考方案1】:

一个简单的解决方法是:

DetailView *detailViewController = [[Detailview alloc] initWithNibName:@"Detailview" bundle:nil];
detailViewController.controller = self;
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];

然后在详细视图中:

self.controller.data = data;
[self.navigationController popViewControllerAnimated:YES];

我希望你知道如何创建属性,否则请给我留言。

【讨论】:

是的,在大多数情况下,这种方法是首选方法,因为您将视图控制器的通信限制在它们之间,而不涉及其他实体(单例、外部...)。当然,如果您的详细视图控制器需要在应用程序内(或由不同的应用程序)重复使用,则必须用基于委托的方法替换,作为库组件。无论如何,如果不是这种情况,请保留答案中给出的建议。 @viggio24,我同意,使用委托将是一种更通用的方法,但对于这个简单的情况,我认为这个解决方案就足够了。 为什么要使用两个步骤呢?只需让父控制器直接设置孩子的数据属性,这样,孩子就不必知道有关父母的任何事情,这使得孩子的可重用性和可维护性更高。它的代码也更少:detailController.data = self.data;你就完成了。 伙计们,我不知道该说什么.. 效果很好,非常感谢@Erik B @ObjProg 那么你可能想接受我的回答。如果你真的喜欢它,你也可以投票。 :)

以上是关于在堆叠视图之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中的视图之间传递数据

切换时如何在UITabBar视图之间传递数据?

Django 在视图之间传递数据

在两个视图控制器之间传递数据不起作用

在视图控制器 ios 7 之间传递数据

在视图控制器之间传递数据无法正常工作