在堆叠视图之间传递数据
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 那么你可能想接受我的回答。如果你真的喜欢它,你也可以投票。 :)以上是关于在堆叠视图之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章