2013-06-15 6 views
0

Cordova 클리버를 사용하여 내 기본 앱의 일부에 몇 가지 하위 뷰를 삽입하고 있습니다. 내 애플 리케이션의 페이지 사이에 이러한 하위 뷰의 내용을 유지하는 데 어려움을 겪고있다. 예를 들어 ViewController1에서 ViewController2로 이동 한 다음 첫 번째보기 컨트롤러에서 하위 뷰의 내용을 처음으로로드 한 것처럼 재설정했습니다. 나는 애플 리케이션에 걸쳐 이러한 하위 뷰를 보존 할 수있는 방법을 원합니다. 그래서 사용자가 이동할 때 재설정되지 않습니다. 그래서 ViewController.m하나의 View Controller에서 다른 View Controller로 Subview 내용을 보존합니다.

에서
#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 
처럼 여기를로드 한 후 ViewController.h

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

@property (nonatomic,retain) CDVViewController* viewController; 

@end 

의 속성으로 서브 뷰를 유지

그리고 다음은

내가 지금 뭘하는지입니다

도움이나 올바른 방향을 가리키는 것이 대단히 감사합니다.

+0

그럼 ViewController1 또는 ViewController2의 상태를 유지 하시겠습니까? – ModernCarpentry

+0

나는 내가 필요로하는 것을 보존 할 수 있기를 원한다. ViewController1 당신이 그걸 도울 수 있다면 지금 – centree

답변

0

여기 몇 가지 방법을 사용할 수 있습니다. 그 중 하나는 뷰 컨트롤러에 싱글 톤 패턴을 사용하여 하나의 인스턴스 만 생성되도록하는 것입니다. 이 패턴을 사용하면 뷰 컨트롤러는 결코 다시 생성되지 않기 때문에 상태를 유지합니다. 목표 c에 대한 패턴의 예는 here입니다.

하지만 이것이 최선의 방법이 아닐 수도 있습니다. 또 다른 옵션은 뷰 컨트롤러의 일부를 정적 변수와 동일하게 유지하려는 것이므로 뷰 컨트롤러의 새 인스턴스가 생성되면 뷰 컨트롤러의 보존하려는 부분은 여전히 ​​유지됩니다. 같은. 그렇게하면 viewDidAppear 메서드에서 View Controller의 상태를 복원 할 수 있습니다.

두 번째 방법을 사용하려면이 방법을 사용합니다. 먼저 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 

나는이 권장 사항이 문제에 대한 최선의 전반적인 접근 아니라는 것을 추가 할 수 있지만, 그것은 당신의 필요에 따라 작동합니다.

+0

어떻게 하위 뷰를 저장하겠습니까? 보존 된 건물과 나는 맞습니까? – centree

+0

유지 된 속성은 View Controller의 상태를 유지하는 것과 아무런 관련이 없습니다. 'retain'속성은 메모리 관리 측면에서 변수가 관리되는 방식을 관리합니다. – ModernCarpentry

+0

무엇을해야합니까? – centree

관련 문제