1

我正在使用 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

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

4

1 回答 1

2

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

但这可能不是最好的方法。另一种选择是将视图控制器中您想要与静态变量保持相同的部分存储起来,这样如果创建了视图控制器的新实例,您想要保留的视图控制器部分仍然是相同的。如果这样做,您可以在 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

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

于 2013-06-15T18:37:52.037 回答