【问题标题】:iOS - sharing data amongst ViewControllersiOS - 在 ViewController 之间共享数据
【发布时间】:2013-09-03 18:24:06
【问题描述】:

我有 2 个 ViewControllers 用于横向定位

我的第一个 VC (portraitVC) 有多个 UITextFields(大约 30 个) 我正在使用 NSNotifications 来观察界面方向何时发生变化以及何时将 viewController 推送到屏幕上(特定于横向)

我现在的问题是,是否可以在两个 VC 之间共享我的 UITexFields,比如如果我以纵向输入内容,然后当我进入横向模式时,我不会丢失在 TextField 上输入的文本:它应该可以工作反之亦然

非常感谢您的帮助或指导

【问题讨论】:

标签: ios uiviewcontroller uitextfield landscape uiinterfaceorientation


【解决方案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 - 你还能想到什么其他方式这 ? - 请分享
猜你喜欢
  • 2017-10-18
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2018-11-14
相关资源
最近更新 更多