2011-03-20 1 views
0

저는 rootController와 5 개의 contentController를 각각의 클래스로 보유하고 있습니다.ViewControllerA에서 ViewControllerB보기

현재 콘텐트 컨트롤러에서 다음 콘텐트 컨트롤러를 호출 할 수 있기를 원합니다. 예를 들어, 현재 contentController1을 표시하고 있다면 contentController2를 표시하는 방법이 필요합니다.

새 컨트롤러를로드하고 표시하는 실제 메서드에 호출 할 컨트롤러 번호를 전달한 모든 컨트롤러의 구현 파일에 간단한 메서드를 추가 할 수 있다면 이상적입니다. 예를 들어

: (? 루트 컨트롤러 응용 프로그램 위임) 다음에 다른 곳

@implementation ContentController1 

- (int) loadNextController { 
    //take the 1 from ContentController1, add 1 to it, and pass it somewhere else 
} 

제 (INT) loadNextController 방법에서 보낸 INT에 따라 contentController을 보여줍니다 다음로드 다음과 같은 방법을 추가 : 당신이 나에게 코드를 보여줄 수 있다면 그것은 어디로

-(void) loadNextController: (int) nextController { 
//init and show controller 
} 

하고, 더 중요한 것은, , 나는 그것을 정말 감사하겠습니다.

트레버

답변

0

당신이보기 컨트롤러가 서로 관계하는 방법을 정확히 분명하지 않다. 예를 들어, 각 컨트롤러를 차례로 탐색 컨트롤러의 스택으로 밀어 넣어 사용자가 항상 이전보기 컨트롤러를 통해 돌아갈 수있는 옵션을 제공 할 수 있습니다. 또는 사용자가 돌아갈 옵션없이 5 개의 컨트롤러를 차례로 통과해야한다는 요구 사항이있을 수 있습니다.이 경우 시간이되면 각 컨트롤러에 window의 rootViewController 속성을 설정하게됩니다. 결정에 따라 각 컨트롤러의보기를 표시하는 코드를 작성하는 방법이 결정됩니다. 자세한 내용은 View Controller Programming Guide을 참조하십시오.

위에서 설명한 디자인에는 다음에 표시 할보기 컨트롤러를 결정하는 각보기 컨트롤러가 있습니다. 종종보기 컨트롤러가 계층을 형성하는 경우에 적합합니다. 그러나 설명에 따르면 컨트롤러가 하나의 객체로 표시되는 시퀀스에 대한 모든 지식을 집중하는 것이 도움이 될 것 같습니다. 이 개체를 각 컨트롤러의 대리자로 만들고 해당 개체 (응용 프로그램 위임)가 컨트롤러의 순서를 결정하도록합니다. (안된) 예를 들어, 당신은 앱 위임이를 추가 할 수 있습니다 :보기 컨트롤러는 다음 컨트롤러로 전환 할 준비가 될 때마다

다음
-(void)application:(UIApplication*)app didFinishLaunchingWithOptions:(NSDictionary*)options 
{ 
    //... 
    self.controllers = [NSArray arrayWithObjects: 
        [[[ViewControllerA alloc] initWithNibName:nil bundle:nil] autorelease], 
        [[[ViewControllerB alloc] initWithNibName:nil bundle:nil] autorelease], 
        //... 
        [[[ViewControllerN alloc] initWithNibName:nil bundle:nil] autorelease]]; 

    // Make self the delegate for each of the view controllers. 
    [self.controllers setValue:self forKey:@"delegate"]; 

    [self.navigationController pushViewController:[self.controllers objectAtIndex:0] animated:NO]; 
} 

-(void)viewControllerDidFinish:(UIViewController*)controller 
{ 
    NSUInteger index = [self.controllers indexOfObject:controller]; 
    NSUInteger nextIndex = index + 1; 

    if (nextIndex < [self.controllers count]) { 
     [self.navigationController pushViewController:[self.controllers objectAtIndex:nextIndex animated:YES]; 
    } 
} 

은, 그냥 호출 할 수 있습니다 :

[self.delegate viewControllerDidFinish:self]; 

다시 생각해 보면 배열의 뷰 컨트롤러 순서에 따라 컨트롤러가 표시되는 순서가 결정된다는 것입니다. 여기에 nav 컨트롤러를 사용해 왔지만 그렇게 할 필요는 없습니다. 또한 -viewControllerDidFinish : (UIViewController *) 컨트롤러 메서드로 프로토콜을 선언하고, 응용 프로그램 대리인 (또는 컨트롤러가 관리하는 개체)에서 해당 프로토콜을 채택하고 컨트롤러의 대리자 속성에서 해당 프로토콜을 지정하도록 할 수 있습니다. 메서드를 구현하지 않은 대리자에 대한 경고는 피할 수 있습니다.