将子视图内容从一个View Controller保留到另一个View Controller

时间:2013-06-15 17:56:21

标签: objective-c cocoa-touch cordova

我正在使用Cordova切割器将一些子视图插入到我的原生应用程序的部分内容中。我很难在我的应用页面之间保留这些子视图的内容。例如,如果我从ViewController1转到ViewController2然后再返回第一个视图控制器上的子视图的内容已重置,就好像它刚刚第一次加载一样。我想要一种在应用程序中保留这些子视图的方法,这样当用户四处移动时它们就不会重置。

这就是我现在正在做的事情:

将子视图保留为ViewController.h中的属性

#import <UIKit/UIKit.h>
#import <Cordova/CDVViewController.h>
@interface ViewController : UIViewController

@property (nonatomic,retain) CDVViewController* viewController;

@end

然后在ViewController.m

中加载它
#import "ViewController.h"
#import <Cordova/CDVViewController.h>
@interface ViewController ()

@end

@implementation ViewController
@synthesize viewController;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
viewController = [CDVViewController new];

viewController.useSplashScreen = NO;


viewController.view.frame = CGRectMake(0, 44, 320, 450);
[self.view addSubview:viewController.view];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

非常感谢任何帮助或指向正确的方向。

1 个答案:

答案 0 :(得分:2)

您可以采取一些方法。其中之一是为视图控制器使用单例模式,因此只创建一个实例。使用该模式,视图控制器将保留其状态,因为它永远不会被重新创建。目标c的那种模式的一个例子是here

但这可能不是最好的方法。另一种选择是存储您希望与静态变量保持一致的视图控制器的部分,这样,如果创建了视图控制器的新实例,您想要保留的视图控制器部分仍将是相同。如果这样做,您可以在viewDidAppear方法中恢复视图控制器的状态。

如果你要使用第二种方法,我会这样做。首先,从CDVViewController的头文件中删除@property声明。然后,在您的实现文件中执行以下操作:

#import "ViewController.h"
#import <Cordova/CDVViewController.h>
@interface ViewController ()

@end

@implementation ViewController

static CDVViewController *__MY_STATIC_CDVViewController;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    if( ! __MY_STATIC_CDVViewController ) {
         __MY_STATIC_CDVViewController = [CDVViewController new];
         __MY_STATIC_CDVViewController.useSplashScreen = NO;
         __MY_STATIC_CDVViewController.view.frame = CGRectMake(0, 44, 320, 450);
    }

    [self.view addSubview: __MY_STATIC_CDVViewController.view];
}

@end

我想补充一点,这个建议不是解决问题的最佳方法,但它应该能满足您的需求。