2009-03-27 4 views
2

Objective-C와 iPhoneSDK를 천천히 선택하고 있지만 MVC 패턴을 고민하는 데 문제가 있습니다.UIViewController .... AppDelegate .... 코드가 어디로 간다!

나는 스플래시 화면, 제목, 도움 등등과 같은 화면을 갖기를 희망하는 게임을 만들고있다. 현재 내가하고있는 것은이 스크린 각각에 대해 새로운 UIViewController와 새로운 펜촉을 만드는 것이다. 올바른 연습? AppDelegate의 주요 뷰에서는 뷰를 표시하고 [window addSubView : controller.view]를 사용하여 뷰를 추가하는 메서드를 만들었습니다. 내가 발견 한 것은 AppDelegate에 표시/숨기기 코드가있는 상태에서 숨겨진 코드를 대상으로하기 위해로드 된 컨트롤러에 AppDelegate에 대한 참조를 만들어야한다는 것입니다. 이것은 약간 어색한 것 같습니다. 그러나 나는 아마도이 잘못된 것으로 접근 할 것입니다. 여러분은 보통 이런 종류의 일을 어떻게합니까?

// example from AppDelegate 
-(IBAction)showHelp:(id)sender 
{ 
    helpScreen = [[helpController alloc] initWithNibName:@"helpView" bundle:nil]; 

    // send copy of self in order to target closeHelp method from InterfaceBuilder 
    helpScreen.appDel = self; 

    helpScreen.view.alpha = 0; 
    [window addSubview:helpScreen.view]; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1.0]; 
    helpScreen.view.alpha = 1.0; 
    [UIView commitAnimations]; 
} 

많은 감사, 나에게 합리적인 것 같다

답변

0

. 나는 Obj-C를 처음 접했지만 응용 프로그램을 완성한 방법이다.

ViewControllers가 서로에 대해 알지 못하는 한 잘하고 있다고 생각합니다.

3

의 UIViewController하고이 화면 각각에 대해 새 펜촉이 오른쪽 연습

엡입니다!

[창 addSubView : controller.view]

당신은 또한 애니메이션의 끝에 기존의 전경을 제거하고 있습니까? 꼭 그렇지는 않아야합니다. 그렇지 않으면 한 번에 여러 개의보기 컨트롤러가 실행되고 실제로 원하지 않는 것이 있습니다.

내가 찾는거야 것은 표시/숨기기 코드가 AppDelegate에에 앉아 함께, 내가 숨기기 코드를 대상으로하기 위해로드 컨트롤러 에서 AppDelegate에의 참조를 생성해야한다는 것입니다

어딘가에보기를 전환하는 코드가 필요하며보기가이 전환을 제어 할 수 있으면 코드를 실행할 수있는 방법이 필요합니다. 응용 프로그램 대리인이 아니라 일반적으로 이러한 변경을 수행하는 RootViewController가 있습니다.

이러한 변경 사항을 수행하기위한 대리인 속성이있는 기본 클래스에서 이러한 각 뷰를 파생하는 경향이 있습니다. 뷰를 변경해야하는 경우 대리자에서 함수를 호출합니다. 이들은 보통이다;

  • pushView - 일시적으로보기를 활성으로 푸시하고 현재보기가보기 계층에서 제거되지만 소멸되지 않습니다. 이것은 도움말 화면과 같은 용도로 사용됩니다.
  • popView - 현재보기가 삭제되고 이전보기가 복원됩니다. 도움말 화면이 제거되는 방식입니다.
  • changeView - 현재보기가 삭제되고 지정된보기로 바뀝니다.이것은 도움말의 page1에서 page2로 변경하는 방법 일 수 있습니다.

예.

// your root controller 
-(void) changeView:(UIViewController) newController 
{ 
    newController = blah blah; 
    newController.delegate = self; 

    // add newController view, remove old one etc 
} 

// new controller 
-(void) userPressedHelp 
{ 
    UIViewController* help = blah blah; 
    [self.delegate pushView: newController]; 
} 

// help controller 
-(void) userPressedOk 
{ 
    [self.delegate popView]; 
}