iOS - 在ViewControllers之间共享数据

时间:2013-09-03 18:24:07

标签: ios uiviewcontroller uitextfield landscape uiinterfaceorientation

我有2个ViewControllers用于横向定位

我的第一个VC(portraitVC)有多个UITextFields(大约30个) 我正在使用NSNotifications来观察接口方向何时发生变化,何时它会在屏幕上推送一个viewController(特定于横向)

我现在的问题是,是否有可能在两个VC之间共享我的UITexFields,就像我以纵向方式输入内容然后当我进入横向模式时,我不会丢失我在TextField上输入的文本:它应该工作另一种方式

您的帮助或指导非常感谢

1 个答案:

答案 0 :(得分: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。

如果您仍然决定继续使用另一个VC,那么我会根据您的需要创建一个只包含一堆NSStringNSAttributedString的类。然后,您需要在每个VC上使用一种方法,例如:

- (void)updateTextboxesWithData:(MyDataStorage*)data {
    for(UITextbox in self.textboxes) {
        t.text = data.string;
    }
}