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,那么我将创建一个仅包含一堆 NSStrings 或 NSAttributedStrings 的类,以满足您的需求。然后,您需要在每个 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:视图控制器之间的导航

IOS开发之利用单例模式完成两个ViewController之间的传值

故事板 Segue 与委派。哪种方法更适合在 ViewController 之间传递数据

如何在 Cocoa Touch 中的任意两个 ViewController 之间进行转换?

iOS学习笔记—ViewController/生命周期

仅限iOS 10:在viewbarcontroller中隐藏在tabbar后面的Viewcontroller