2014-03-14 1 views
1

사이에 변경할 때 내 ViewControllers이 중복 VC1, VC2 및 VC3 예를 들어나는 일반적으로 다른의 ViewController에 변경 내용 추적 방법을 사용하여 각각

을, 내가 원하는 경우 VC1 파일에서 VC1에서 VC3에 스왑,

: 나는 VC3에서 오전 때 나는 VC1을 가고 싶은 경우

VC3 *myVC3 = [[VC3 alloc]initWithNibName:@"NibName" bundle:nil]; 

[self.view addSubView:myVC3.view]; 

는, 내가 사용

[self.view removeFromSuperView]; 

그런 다음 VC1으로 돌아옵니다.

문제는 ViewControllers가 세 개 이상 있고 응용 프로그램을 테스트 할 때 ViewController가 겹치는 것입니다.

예를 들면 다음과 같습니다. VC1에있는 경우 VC3으로 전환하고 예를 들어 VC2로 이동하려고 할 때 VC1이 나타납니다. 구현 문제라고 생각합니다. 나는이 방법이 ViewControllers의 스왑을 잘못했을 수도 있다고 생각합니다.

어떻게 해결할 수 있습니까? 나는 생각하고 있었다. 그러나 didnt는 어떤 해결이라도 얻는다.

+0

사용하는 것이 좋습니다 다른 ViewController는 첫 번째 뷰를 봅니다. UINavigationController를 구현하고 ViewControllers를 push/pop하는 것을 고려해야합니다. – rdurand

+0

Try -presentViewController : animated : completion : 메서드. – BoranA

+0

은 addSubview 대신 [self presentViewController ...]를 사용하는 것이 좋습니다. 그런 다음 [self dimsissViewController ...]를 제거하려면 –

답변

1

다음과 같은 경우에 사용할 수 있습니다. 그것은

1) 위로 VC1에

[self.view sendSubviewToBack:vc3.view]; 
[self.view bringSubviewToFront:vc1.view]; 

2) 위로 뷰 2에 의미 당신의 도움이 될 수 있습니다

[self.view sendSubviewToBack:vc1.view]; 
[self.view bringSubviewToFront:vc2.view]; 

참고 :이 일을하기 전에 모든 뷰는 뷰 계층에 있어야합니다 Baseview의 하위보기로 추가해야합니다.

하지만이 방법은 스와핑 유형과는 관계가 없습니다. 대신 UINavigationController를 사용해야합니다.

+0

나는 이것을 시도 할 것이다. 이보기에 저장 한 데이터가 사라지거나 여전히 사용할 수 있습니다. – Eladar

+0

@Eladar 내가 당신을 얻을 수 없습니다. 귀하의 질문은 무엇인가? – Mani

+0

예를 들어, 일부 데이터로 UITableView를 채웠습니다. 이제 addSubView 및 removeFromSuperView 사용할 때 여전히 TableView 데이터가 있습니다. 내 질문은 이것이 당신의 방법으로 가능한지 아닌지입니다. – Eladar

0

일반적으로 응용 프로그램 흐름에 나쁜 접근 방식이지만, 당신은 addSubview :와 removeFromSuperview를 bringSubviewToFront :로 대체 할 수 있습니다 (sendSubViewToBack 일 수 있음). 그러나 다시 한 번 잘못된 접근법입니다.

UINavigationController를 사용하여 항목을 정렬하는 것이 좋습니다. 필요할 경우 탐색 표시 줄을 숨길 수 있습니다.

+0

답변 해 주셔서 감사합니다. 하지만 난 정말 UINavigation이 필요하지 않습니다. 왜냐하면 저는 많은 것을 사용하고 많은 의견을 가지고 1에서 2로, 3으로 갈 수 있기 때문에 1로 돌아옵니다. 내가 말하는 것을 이해합니까? 그리고 UINavigation을 사용하면 A에서 B로 이동 한 다음 A로 돌아 오지만보다 유연성이 필요합니다. – Eladar

+0

@Eldar : UINavigationController의 poptoViewController 메소드에 대해 들어 보셨습니까? bringSubviewToFront : and sendSubViewToBack : 도와 주시겠습니까? –

1

내 제안에 따라, 당신은 하나의 ViewController를 사용하여 추가하세요 ..

[self.navigationController pushViewController:vc]; 

을 사용하고 다시 돌아가려면, 당신은 정말 ViewControllers를 사용하지 않는

[self.navigationController popViewController]; 
+0

sendSubviewToBack : 및 bringSubviewToFront : 메소드와 다른 점은 무엇입니까? – Eladar

+1

sendSubviewToBack 메서드는 응용 프로그램에서 유지 관리하는 전체 뷰 계층 구조에서 백그라운드로 뷰를 보내는 데 사용되는 반면, bringSubviewToFront는 뷰 계층 구조에서 이전에 추가 된 뷰를 볼 수있게합니다 (포어 그라운드에서 사용 가능하게 만듭니다). – Raj

+0

Ok i 이해할 수는 있지만 코드가하는 일은 무엇입니까? – Eladar