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

ここで取ることができるいくつかのアプローチがあります。それらの 1 つは、View Controller にシングルトン パターンを使用して、インスタンスが 1 つだけ作成されるようにすることです。そのパターンでは、View Controller は再作成されないため、その状態を保持します。目的 c のパターンの例はこちらです。

しかし、それは最善の方法ではないかもしれません。もう 1 つのオプションは、保持したいビュー コントローラーの部分を静的変数として保存することです。これにより、ビュー コントローラーの新しいインスタンスが作成された場合でも、保持したいビュー コントローラーの部分はそのままになります。同じ。これを行うと、viewDidAppear メソッドでビュー コントローラーの状態を復元できます。

2番目のアプローチを使用する場合、私はこのようにします。まず、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 に答える