2011-03-12 56 views
0

在我的应用程序中,我有几个视图..其中一些视图使用导航控制器进行推送和弹出。在一些视图中,我有一个表图,其中它的细胞中的每一个是一个视图本身,因此所选择的小区时,执行该代码:在堆叠视图之间传递数据

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

并在的DetailView这个代码将被执行,点击一个特定的按钮时(如,后/取消键):

[self.navigationController popViewControllerAnimated:YES]; 

我想从的DetailView将数据传递到它之前(即初始化它的视图)的观点是什么。到目前为止,我已经实现了一个名为“Globals.h”的类,我在其中放入了我想传递的数据,并在这些数据变量上使用“extern”以确保它对多个类都是全局的,并且它工作正常正常。但我不认为这是这样做的适当方式。有没有其他好方法可以做到这一点?

感谢提前:)

回答

7

一个简单的方法来解决这个问题是:

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]; 

我希望你知道如何创建属性,否则给我评论。

+0

是的,这种方法是大多数情况下的首选方法,因为您可以保持视图控制器的通信不受其他实体(单例,外部,...)的限制。当然,如果您的详细视图控制器需要在应用程序内部(或由不同的应用程序)重新使用,那么必须用基于委托的方法替代它作为库组件。无论如何,如果不是这样,请保留答案中给出的建议。 – viggio24 2011-03-12 12:55:25

+0

@ viggio24,我同意,使用代表将是一个更一般的方法,但对于这种简单的情况,我认为这个解决方案就足够了。 – 2011-03-12 13:05:44

+0

为什么使用两个步骤?只需让父控制器直接设置孩子的数据属性这样,孩子就不必知道父母的任何信息,这使得孩子更加可重用和可维护。它也少了代码:detailController.data = self.data;你完成了。 – Caleb 2011-03-12 13:27:00

相关问题