2009-10-27 6 views
0

저는 초보자 아이폰 프로그래머이며 부모 뷰 컨트롤러의 메서드에 액세스하는 방법에 관한 질문이 있습니다. 내 프로그램에서 는 프로그램이 처음로드 (아래 applicationDidFinishLaunching는) 다음 코드 수행 할 때, 내가 갖고 싶어 HomeViewController에 IBAction를 호출을 기본적으로 지금이iPhone 개발에서 ParentViewController 메서드에 액세스하는 방법

- (void)viewDidLoad { 

    HomeViewController *homeController=[[HomeViewController alloc] initWithNibName:@"HomeView" bundle:nil]; 
    self.homeViewController=homeController; 
    [self.view insertSubview:homeController.view atIndex:0]; 
    [homeController release]; 
    [super viewDidLoad]; 
} 

를 호출

[window addSubview:rootViewController.view]; 

[window makeKeyAndVisible]; 

이 그것은

나는이 방법

- (void)loadNewGame 
{ 
    self.questionViewController = [[QuestionViewController alloc] initWithNibName:@"QuestionView" bundle:nil]; 
//[homeViewController.view removeFromSuperview];  
    [self.view insertSubview:questionViewController.view atIndex:0]; 
} 
,536에게 전화를 걸 루트 뷰 컨트롤러의 메소드를 호출

그럼 내 질문은 어떻게 부모보기 컨트롤러에서 메서드를 호출합니까?

나는

[self.view removeFromSuperview]; 

[self.parentViewController loadNewGame]; 

을 시도했지만 그 작동하지 않습니다. 누군가 나를 올바른 방향으로 이끌어 줄 수 있습니까? 사전에

덕분에

스콧

답변

0

는 첫째, 일반적으로 당신은 당신의 viewDidLoad에서 [super viewDidLoad] 먼저 호출합니다.

rootViewController의 homeController 클래스에 인스턴스 변수가 있어야합니다.

- (void) loadNewGame 
{ 
    [self.rootViewController loadNewGame]; 
} 

이 이러한 목표를 달성하기 위해 여러 가지 방법 중 하나입니다 : 그럼 당신은 homeController의 방법을 가질 수 있습니다. 이 메소드를 homeController로 완전히 옮길 수 있습니다. 또는 IB가 직접 rootViewControllers 메소드를 사용하도록 할 수도 있습니다 ...

여기 또 다른 discussion of this입니다.

+0

[self viewDidLoad]는 [super viewDidLoad]이어야합니다. – Liam

+0

네가 맞아! 편집 할 것입니다. – mahboudz

0

우선 코드가 의미가 없습니다. 왜 당신은 HomeViewController를 -viewDidLoad 호출에 추가하고 있습니까? HomeViewController를 초기 뷰로로드하려면 RootViewController 대신 Interface Builder에서 설정해야합니다. 새 뷰 컨트롤러를 표시하려면 네비게이션 컨트롤러 스택을 사용하고 새 뷰 컨트롤러를 [[self navigationController] pushViewController : newViewController animated : YES]로 푸시해야합니다.

정렬 된 것으로 가정하면 새보기 컨트롤러를 인스턴스화 할 때 설정할 수있는 자식보기 컨트롤러에 대한 대리자 (id) 필드를 만들어야합니다.

HomeViewController *homeController=[[HomeViewController alloc] 
       initWithNibName:@"HomeView" bundle:nil]; 
[homeController setDelegate:self]; 
[[self navigationController] pushViewController:homeController animated:YES]; 
[homeController release]; 

그런 다음 조치가 HomeViewController에서 발사됩니다 때, 당신은 위임 설정 그렇다면,이 같은 문제의 선택기를 호출되어 있는지 확인할 수 있습니다 그래서 당신의 코드를 다음과 같이 보일 수 있습니다 :

- (IBAction)action:(id)sender; 
{ 
    if (delegate && [delegate respondsToSelector:@selector(loadNewGame)]) 
     [delegate performSelector:@selector(loadNewGame)]; 
} 

당신은 Apple's docs on how to use the navigation controller stack을 읽을 수 있습니다. 이것은 몇 가지를 명확히하는 데 도움이 될 수 있습니다.

관련 문제