iOS - 在 ViewController 之间共享数据
Posted
技术标签:
【中文标题】iOS - 在 ViewController 之间共享数据【英文标题】:iOS - sharing data amongst ViewControllers 【发布时间】:2013-09-03 18:24:06 【问题描述】:我有 2 个 ViewControllers 用于横向定位
我的第一个 VC (portraitVC) 有多个 UITextFields(大约 30 个) 我正在使用 NSNotifications 来观察界面方向何时发生变化以及何时将 viewController 推送到屏幕上(特定于横向)
我现在的问题是,是否可以在两个 VC 之间共享我的 UITexFields,比如如果我以纵向输入内容,然后当我进入横向模式时,我不会丢失在 TextField 上输入的文本:它应该可以工作反之亦然
非常感谢您的帮助或指导
【问题讨论】:
这是一个很好的指南(附来源):iphonedevsdk.com/forum/iphone-sdk-development/… 【参考方案1】:我可以想出几种方法来处理这个问题。
首先,重新考虑您选择使用两个不同的 VC 来处理方向变化。将您的第一个 VC 上的 UI 更新为适合纵向显示有多难?
其次,将数据抽象为结构或类,以便您可以在两个 VC 之间来回传递它
@interface MyDataStorage : NSObject
NSString* text1;
NSString* text2;
NSString* text3;
NSString* text4;
最后,您可以创建一个协议来保持两个 VC 同步:
@protocol VCSync : NSObject
- (void)updateTextBox1:(NSString*)contents;
- (void)updateTextBox2:(NSString*)contents;
...
您需要保留对其他 VC 的引用,以便您可以从 TextBox 委托回调中调用适当的方法。
RE:文档链接
如果你引用这段话:There are better ways to provide unique views for different orientations, such as presenting a new view controller
那么你应该阅读前一句。
仅当您要换出整个视图层次结构时才建议使用新的 VC。如果您只是调整文本框的大小,那么我只需在 willAnimateRotationToInterfaceOrientation:duration:
中编写代码即可,因为这样您就不必将任何信息从一个 VC 移动到另一个。
如果您仍然决定继续使用另一个 VC,那么我将创建一个仅包含一堆 NSString
s 或 NSAttributedString
s 的类,以满足您的需求。然后,您需要在每个 VC 上使用一个方法,如下所示:
- (void)updateTextboxesWithData:(MyDataStorage*)data
for(UITextbox in self.textboxes)
t.text = data.string;
【讨论】:
感谢您的快速响应 Clay - 好吧,我希望 LAndscape 看起来完全不同 - 同样根据 Apple 文档,developer.apple.com/library/ios/featuredarticles/… - 他们建议使用 2 个单独的 VC - 你还能想到什么其他方式这 ? - 请分享以上是关于iOS - 在 ViewController 之间共享数据的主要内容,如果未能解决你的问题,请参考以下文章
IOS开发之利用单例模式完成两个ViewController之间的传值
故事板 Segue 与委派。哪种方法更适合在 ViewController 之间传递数据