我正在使用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
非常感谢任何帮助或指向正确的方向。
答案 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
我想补充一点,这个建议不是解决问题的最佳方法,但它应该能满足您的需求。