我正在创建一个应用程序,我必须从16 UITextFields
传递数据,将它们以类对象的形式存储在数组中,并将该数组中的所有对象显示在其他viewController
中。iphone viewController
如何将数据从一个viewController
传递给另一个?
我正在创建一个应用程序,我必须从16 UITextFields
传递数据,将它们以类对象的形式存储在数组中,并将该数组中的所有对象显示在其他viewController
中。iphone viewController
如何将数据从一个viewController
传递给另一个?
假设您有两个视图控制器,分别命名为viewController1
和viewController2
。在viewcontroller2
中有一个实例变量textData
的NSArray
。确保将@property
和@synthesize
添加到变量中。分配在阵列中的viewController2
的init
方法和可以通过
viewController2.textData = viewController1.textArray;
通过从所述第一的viewController到第二阵列可以在第二视图控制器声明阵列和设置属性和合成,然后就可以将数据从第一个传递到第二个视图控制器通过
secondviewcontroller *obj = [[secondviewcontroller alloc]init];
obj.array = data;
您可以通过简单的方法实现。在第一个控制器(例如FirstViewController
)可以将所有的字段存储在数组中:
NSArray *_fields;
然后,使阵列通过@property
构建访问:
@property (readonly) NSArray *fields;
而在.M实施你让他们可以通过电话@synthesize
:
@synthesize fields = _fields;
在第二控制器(例如SecondViewController
)你应该有一个指向第一个,使用相同的上述构造:
FirstViewController *_controller;
然后
@property(nonatomic, retain) FirstViewController *controller;
,并在.M你将有:
@synthesize controller = _controller;
当您创建第二个控制器,您将不得不将指针保存到第一个控制器。例如。
FirstViewController *first = [[FirstViewController alloc] init];
SecondViewController *second = [[SecondViewController alloc] init];
second.controller = first;
然后,你将能够使用second.controller.fields
第一控制器读取UITextField实例。
有点困惑。 – 2011-05-10 12:19:14
关于什么?问,我会回答...我纠正了一些事情,使其更清晰。 – marzapower 2011-05-10 12:20:14
在哪里定义FirstViewController和SecondViewController?在MainWindow.xib中? – 2011-05-10 13:08:32
有几百种方法可以实现这一点。这一切都取决于你所需要的数据做什么和你需要多长时间来存储它等
一般无关视图控制器之间的通信是难看的症状设计。我会避免这种情况。
单身物体可能是您的最佳选择。 永不使用应用程序的代理或NSUserDefaults
在对象之间共享数据。这同样适用于将数据保存在磁盘上的plist上并从另一个控制器重新加载。这是非常糟糕的设计。
顺便说一句:不管你的技术水平如何,拿到这本书,Cocoa Design Patterns。它与iPhone的开发没有直接关系,但它以一种清晰的方式解释了Cocoa的设计和模式。了解它将有助于您设计未来的应用程序。
从一个视图控制器传递给下一个视图控制器的许多信息是一个明显的模型 - 视图 - 控制器设计的迹象。您的应用程序逻辑应该尽可能地下推到领域层。
我猜你正在实施某种向导的功能。引入一个新的FooWizardState
域对象,并将其从一个视图控制器传递到下一个视图控制器。通过这种方式,您可以轻松地将您的第一台视图控制器从16个文本字段中分解出来,以便在需要时或每位客户要求的情况下,每两个控制器都带有8个文本字段
使用此设计,您还可以轻松更改视图控制器,以防万一需要为iPad/iPhone用户界面习语重新进行向导的一步操作。
这就是传统的C++方式。我想用obj-c的方式使用id –
2011-05-10 13:09:38