2012-07-22 3 views
0

로드 할 때 모든 탭이 잘 작동하는 탭 기반 앱을로드하는 앱이 있습니다. 그러나 첫 번째 탭에는로드 된 뷰에 전체 버튼이 있습니다. 나는이 단추의 메서드를 작성 했으므로 눌렀을 때 새로운 하위 뷰 (.xib)를 누르면 잘 작동합니다.현재 서브 뷰 제거하기

그러나 이러한 새 하위보기에는 고유 한 메서드가있는 뒤로 단추가 있습니다. 이 버튼을 클릭하면보기가 제거되고 원래보기로 돌아갑니다. FirstViewController.m의 코드는 다음과 같습니다.

이 파일은 다른 .xib 파일을 처리하더라도 모든 코드를 보유한다는 점에 유의하십시오. 기본적으로 FirstView를 먼저 푸시하고 버튼을 누를 때 E87view.xib을 누르면 .xib의 코드가 firstviewcontroller 파일에 그대로 남아 있습니다. 내가 FirstView.xib이 새보기 E87view.xib를 밀어 것 장전 첫 번째보기의 버튼 E87을 누르면

-(IBAction) backButtonPressed { 
    [self showAll]; 
    backButton.hidden = 1; 

    for (UIView *subview in [self.view subviews]) { 
     [subview removeFromSuperview]; 
    } 
    [self showAll]; 
} 

-(IBAction) E87Pressed { 
    //[self hideAll]; 

    E87view *e87view = [[E87view alloc] initWithNibName:@"E87view" bundle:[NSBundle mainBundle]]; 

    [self.navigationController pushViewController:e87view animated:YES]; 
    [self.view addSubview:e87view.view]; 
} 

그래서 그냥 반복합니다. 그러나 새로이로드 된 E87view에있는 뒤로 버튼을 누르면 위의 기능에 액세스하고보기를 제거하지만 내가 가지고 있던 모든 설정을 제거합니다. FirstView.xib 본질적으로 빈 앱으로 저를 떠납니다.

희망이 있으시면 조금이라도 혼란 스러울 수 있습니다.

감사

루이스

+0

당신이 말하는 텍스트에서 탭 컨트롤러를 사용했다는 것입니다. 코드에서는 네비게이션 컨트롤러를 사용하고 있다고 말합니다. 한 탭에서 탐색 컨트롤러를 사용하고 있습니까, 아니면 탭 컨트롤러가 실수입니까? – Pfitz

+0

아니요 탭이있는 앱이며 위임자는 tabBarController를 가지고 있습니다. –

답변

2

대신 개개인 파단 제거 단지

[self.navigationController popViewControllerAnimated: YES]; 

를 사용하여 탐색 컨트롤러로부터의 ViewController를 제거하고,이 라인은 불필요하다

[self.view addSubview:e87view.view]; 
+0

줄을 추가한다고 가정합니다. [self.navigationController popViewControllerAnimated : YES]; 뒤로 버튼을 사용 하시겠습니까? 그것은 작동하지 않습니다. 그리고 서브 뷰 라인은 e87이 눌려 졌을 때 그 전망을 전면으로 가져 오는 것입니다. –

+0

eviewview.view를 서브 뷰로 추가 할 필요가 없으며 네비게이션 컨트롤러는 pushViewController : animated :가 호출되면 viewController의 뷰를 표시합니다. popViewControllerAnimated :를 호출하면 똑같은 일이 발생하여 미리보기 viewController보기로 되돌아갑니다. 문제가 해결되지 않으면 다른 곳에서 문제가 발생할 수 있습니다. –

+0

바로 전선이 지나간 것 같습니다. My FirstViewController 파일에는 FirstView.xib의 모든 버튼에 대한 모든 코드와 e87view.xib와 같은 모든 뷰를 표시합니다. 줄, [self.view addSubview : e87view.view]; , 하위보기 e87view를 앞면으로 가져오고, 뒤로 단추 만 있으면 비어 있습니다. 뒤로 버튼은 해당보기를 제거해야합니다. 해당보기를 제거하려면 어떻게합니까? 뒤로 버튼은 FirstViewController에서 위의 함수에 연결된 UIButton을 배치 한 버튼입니다. –

0

당신의 코드를 보면, 나 혼란 스러워요.

1)보기 컨트롤러를 화면에 밀어 넣은 후 왜 기본보기에 viewController e87view의 하위보기를 추가합니까? ? viewController e87view를 누르면 모든 것을 처리해야합니다. viewController가 navigationController 스택에 추가되고 해당 viewController의 뷰도 제공되어야합니다.

그래서 화면에 두 번보기를 추가합니다

[self.view addSubview:e87view.view]; 

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

를 호출.

2) 내비게이션 코드를 직접 작성하는 이유는 무엇입니까? 이 이 될 수 있지만 ... 당신이하고 싶은 것이 맞습니까? 일반적으로 navigationController에 viewController e87view를 푸시 한 후 이면, 뷰 콘트롤러 e87view에는 제목이 인 경우 뒤로 버튼이 자동으로 표시됩니다.

+0

무슨 뜻인지 모르겠다. 내가 게시 한 코드는 두 가지 기능이있다. 하나는 E87 버튼에 적용되고 다른 하나는 다른 버튼에 적용된다. 만약 내가 [self.view addSubview : e87view.view] 줄을 주석으로 다음 E87 단추를 누르면 아무 일도 일어나지 않는다. 본질적으로 내가 그것을 떠날 때 그것은 E87view.xib를 앞에 가져 오는 선이다. .이 새로운 xib에 나는 앞에 다른 UIButton을 추가했다.이 단추는 내 게시물의 첫 번째 함수에 연결되어있다. 그냥보기를 제거하고 원래보기로 돌아가고 싶다. –

+0

이 점에 대해 알고 이해해주십시오. 위 코드는 ** firstViewController ** 파일에 포함되어 있습니다 .. firstViewController는 첫 번째 탭을 클릭하면로드되는 viewController입니다. 그리고 .. backButtonPress ed 메소드는 firstViewController의 버튼 중 하나에서로드 된 새로운 뷰 각각의 언로드를 처리합니까? –

+0

나는 그런 생각을 혼란스럽게 생각합니다. 용서하세요. 지금 내가 한 것은 바로 E87view.h/.m에서 뒤로 단추를 선언하고 구현하는 것입니다. U87utton을 E87view.xib에 추가했습니다. 맞아요. 응용 프로그램이 시작되면 MainWindow.xib 및 FirstView.xib가 FirstViewController 클래스에서 처리되는 코드와 함께 표시됩니다. 이 클래스에서 UIButton E87을 누르면 E87view.xib가 화면에 유지되고 (탭 유지)이 xib에는 방금 E87view 클래스로 이동 한 backButtonPressed 함수에 연결된 다른 UIButton이 있습니다. –