如何保持UIScrollView的状态?

时间:2013-05-26 19:14:01

标签: ios objective-c uiscrollview

我的应用将子视图写入UIScrollView。这些子视图是链接到用户将信息输入到应用程序的其他部分的按钮。我想保存这些数据,包括应用程序退出时的子视图。我的ViewController(存储滚动视图及其所有子视图)在故事板中具有恢复ID。我该如何使用它?这就是我到目前为止所做的:

AppDelegate.m

- (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder {

    return YES;
}

- (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder {

    return YES;
}

ViewController.m

- (void)encodeRestorableStateWithCoder:(NSCoder *)coder {

    [super encodeRestorableStateWithCoder:coder];
    [coder encodeObject:self.scrollView forKey:@"scrollView"]; 
}

- (void)decodeRestorableStateWithCoder:(NSCoder *)coder {

    [super decodeRestorableStateWithCoder:coder];
}

1 个答案:

答案 0 :(得分:1)

在模型视图控制器设计(或任何理智设计)中,您不希望物理存储视图,您不想保存可以从中重新创建视图的其他模型数据。

根据您的简短描述,您可能希望创建自己的模型对象,这些对象支持NSCoding并存储它所代表的对象的整个状态。例如:

创建一个存储基本数据的模型对象(实现NSCoder):

@interface ButtonInfo : NSObject <NSCoding>
@property(nonatomic, copy)NSString* title;
@property(nonatomic, assign)CGRect frame;
@property(nonatomic, retain)UIColor* color;
@end

您可以在保存时从视图生成模型数据,也可以将模型存储在视图旁边。

- (void)saveButtonInfos

或者:

- (void)saveViews:(NSArray*)views
{
   NSMutableArray* toWrite = ...
   for (view in views)
   {
      // make button info from view, add to array.
   }
}

最后在加载时从模型数据生成视图。

- (void)loadViewsFrom:(NSArray*)buttonInfos
{
    for (info in buttonInfos)
    {
      // Create new button
      // modify properties
    }
}