2009-05-06 4 views
1

개별 UIViewController 및 xib가있는 다중보기 응용 프로그램이 있습니다. 나는 게임보기 인 하나의 견해를 가지고 있으며, 내가 다시 부르기를 원할 때마다, 다시 시작하기를 원한다. 처음 상태로 돌아가고 마지막으로 나간 상태가 아니라는 뜻이다.뷰 컨트롤러 다시 초기화 - iPhone

여기있다. 내가보기를로드하고 제거하기 위해 사용하고 코드 블록 :

-(void)loadStartViewController { 
[currentView.view removeFromSuperview]; 
StartViewController *startViewController = [[StartViewController alloc] initWithNibName:@"StartView" bundle:nil]; 
[window addSubview:startViewController.view]; 
currentView = startViewController; 

} 여기 더 명확해야

. UIViewController 및 xib 게임을 재생하는 동안보기를 구성 할 수 있습니다. UIView에서 메서드를 호출하여 프로그래밍 방식으로 뷰를 그립니다. 게임이 끝나고 점수 화면으로 이동하면 UIViewController를 종료합니다. 사용자를 다시 시작하고 게임으로 돌아가고 싶습니다. IE는 위 코드로 UIViewController를로드하지만 새 게임으로 시작합니다. 모든 설정은 메서드에 호출됩니다. 변수를 설정하고 UIViewControllers간에 전달할 수 있지만 게임 UIViewController 재설정 할 수있는 명령이있을 수도 있지만 마지막 게임 끝에 상태에 대해 아무것도 기억하지 않습니다.

나는 게임 화면을 그리는 UIView의 모든 변수를 재설정하고 해당 메서드를 viewDidLoad 섹션의 UIViewController에서 호출하는 메서드를 작성했습니다.

답변

2

귀하의 견해가 모델 (게임 상태)에 저장된 일부 데이터를 표시한다고 가정합니다. 그러면 게임 상태를 다시 설정하고보기에 표시되도록 하시겠습니까? 뷰는 메모리가 부족할 때 표시하거나 해제해야 할 때 시스템에서 관리 (로드/릴리스/다시로드)됩니다. 따라서 게임 상태를 별도로 처리하는 경우 게임 상태 (모델)를 업데이트하고 뷰에 표시되도록해야합니다.

"내게 전화하는 것"이 ​​무엇을 의미합니까? '메뉴'에서 '게임 화면'으로 이동할 때를 의미합니까?

보기가 표시된 후에 게임 상태를 다시로드했을 수도 있습니다. viewDidLoad과 같은 일부 대리자가 있지만 내 이해는 뷰가로드 된 후에 호출되는 것입니다. 그러나 메모리가 부족하면 나중에 뷰가 릴리즈되고 다시로드되어 모델 객체에서 게임 '상태'를 직접 관리하고 뷰를 표시하도록해야합니다.

도움이 될지 확실하지 않아서, 내 '전화 걸기'를 의미하는 것이 확실하지 않습니다.

0

현재 어떤보기가 표시되는지 추적하는 대신 UINavigationController를 사용하십시오. 그것이 바로 그들이 원하는 것입니다. 앱 위임의 아래 applicationDidFinishLaunching에서 :

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:startViewController]; 

는 startViewController의 인스턴스 변수를 작성하고 당신이 그것을 만든 후 탐색 컨트롤러에에게 포인터를 전달합니다. 다음 게임에 가고 싶을 때 :

[self.navigationController pushViewController:gameViewController animated:YES]; 

또는 무엇이든 움직이지 않게하십시오.당신은 또한 아마와 탐색 모음 숨길 것 : 게임이 종료되면, 당신은 당신이 원하는대로 전망 밀어 유지할 수

[self.navigationController setNavigationBarHidden:YES animated:NO]; 

, 그리고 당신은 항상 함께 첫 번째보기로 돌아갈 수 있습니다

[self.navigationController popToRootViewControllerAnimated:YES]; 
아, 그리고 다시 초기화 연주하는 게임 매번에 관해서는

, 바로 게임보기 컨트롤러

-(void)viewWillAppear:(BOOL)animated{} 

를 구현하고 당신이 원하는대로 초기화 할. 솔직히 나는 .xib와 함께 사용해야한다고 100 % 확신하지는 않습니다. 나는 인터페이스 빌더를 거의 사용하지 않기 때문에 확실하지 않습니다. 그러나 나는 그것이 효과가있을 것이라고 생각한다.