繁体   English   中英

iphone viewController

[英]iphone viewController

我正在创建一个应用程序,我必须从16个UITextFields传递数据,以类对象的形式将它们存储在数组中,并在其他viewController显示该数组中的所有对象。

如何将数据从一个viewController到另一个?

假设您有两个名为viewController1viewController2视图控制器。 viewcontroller2有一个NSArray的实例变量textData 确保将@property@synthesize到变量中。 viewController2init方法中分配数组,您可以将数组从第一个viewController传递给第二个

viewController2.textData = viewController1.textArray;

通常,不相关的视图控制器之间的通信是丑陋设计的症状。 我会避免这种情况。

单身对象可能是您的最佳选择。 永远不要使用应用程序的委托或NSUserDefaults在对象之间共享数据。 这同样适用于在磁盘上的plist中保存数据并从另一个控制器重新加载它。 那只是非常糟糕的设计。

顺便说一下:无论你的技术水平如何,都可以获得这本书, Cocoa Design Patterns 它与iPhone开发没有直接关系,但它以清晰的方式解释了Cocoa的设计和模式。 了解它将有助于您设计未来的应用程序。

你可以在第二个视图控制器中声明数组并设置属性并合成它,然后你可以从第一个通过第二个视图控制器传递数据

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实例。

有数百种方法可以实现这一目标。 这完全取决于您需要对数据执行的操作以及需要存储的时间等。

  • 您可以拥有一个包含数据的单例类 - 可以从应用程序的任何位置访问单例。
  • 您可以将数据存储在应用程序委托中。 它也可以从您的应用程序的任何位置访问:[[UIApplication sharedApplication] delegate]
  • 您的viewControllers可以直接相互通信。
  • 您可以将数据存储为用户默认值( NSUserDefaults
  • 您可以将数据存储在一个文件中(也许是一个plist?)

从一个视图控制器传递到下一个视图控制器的大量信息清楚地表明模型 - 视图 - 控制器设计不良。 您的应用程序逻辑应尽可能地下推到域层。

我猜你正在实现某种向导功能。 引入一个新的FooWizardState域对象,并将其从一个视图控制器传递到下一个。 通过这种方式,您可以轻松地将您的第一个视图控制器从16个文本字段分解为两个控制器,每个控制器具有8个文本字段,如果需要,或者客户需要。

使用此设计,您还可以轻松更改视图控制器,以防需要为iPad / iPhone用户界面惯用法重做向导的一个步骤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM