2012-04-14 5 views
0

이 사이트와 인터넷 전체에서 검색하려했지만 여러보기 컨트롤러간에 데이터를 공유하면서 전환 할 수있는 방법을 찾지 못했습니다. 나는 다음과 같은 코드를 사용하려고 (첫 번째 방법은 다른 방법은 다음보기를 전환 호출) :보기 컨트롤러 전환

-(IBAction) choosePhoto:(id)sender { 
[self startMediaBrowserFromViewController: self 
          usingDelegate: self]; 
if(firstViewController.view.superview == nil) 
{ 
    [secondViewController viewWillAppear:YES]; 
    [firstViewController viewWillDisappear:YES]; 

    [firstViewController.view removeFromSuperview]; 
    [self.view insertSubview:self.secondViewController.view atIndex:0]; 

    [firstViewController viewDidDisappear:YES]; 
    [secondViewController viewDidAppear:YES]; 
} 

//3. now add animation 
[UIView beginAnimations:@"View Flip" context:nil]; 
[UIView setAnimationDuration:1.25]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
//blue view will appear by flipping from right 
if (secondViewController.view.superview == nil) 
{ 
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight 
          forView:self.view cache:YES]; 

    [secondViewController viewWillAppear:YES]; 
    [firstViewController viewWillDisappear:YES]; 

    [firstViewController.view removeFromSuperview]; 
    [self.view insertSubview:self.secondViewController.view atIndex:0]; 

    [firstViewController viewDidDisappear:YES]; 
    [secondViewController viewDidAppear:YES]; 
} 
[UIView commitAnimations]; 
    } 

- (IBAction)switchViews:(id)sender { 
if(self.secondViewController.view.superview == nil) 
{ 
    [firstViewController.view removeFromSuperview]; 
    [self.view insertSubview:secondViewController.view atIndex:0]; 
} 
    } 

이 멋진 애니메이션을 수행하지만, 뷰 컨트롤러를 전환하지 않습니다.

도와주세요.

EDIT : 또한 첫 번째보기 컨트롤러 내부에 다른보기를 배치하고보기를 전환하는 방법이 유용 할 것입니다.

답변

1

을 전환 UIView.hidden을 사용 내부 UIView의 퍼팅

[[self navigationController] pushViewController:firstViewController animated:YES]; 

, 당신은 교환해서는 안 나 수행하는 동안 뷰 컨트롤러의 컨텐츠 뷰를 혼합합니다. iOS 5에서 새로운 상위 하위보기 컨트롤러 지원을 사용해야하는 경우

iOS 5에서 새로운 상위보기 컨트롤러 지원을 사용하는 경우 transitionFromViewController라는 매우 멋진 메소드가 있습니다. : toViewController : duration : 옵션 : 애니메이션 : 완료 : 대부분의 어려운 일을 처리합니다. 꽤 사용하기 쉽습니다.

(I가 상위/하위 뷰 컨트롤러의 WWDC 동영상을 시청하지 않은,하지만 그것은 시작하는 좋은 장소가 될 것입니다. 난 그냥 새로운 방법을 사용하기 시작했다.)

3

코드에서보기를 전환하고 실제로 컨트롤러를 보지 않습니다. 즉, 뷰 컨트롤러 내부 메시징 (예 :보기로드/언로드,보기 표시/사라짐, 자동 실행)의 관점에서 변경 사항이 없으면 원래의 현재보기 컨트롤러가 여전히 맨 위에 표시됩니다. 이제 iOS에서 이것은 일반적으로 컨테이너 뷰 컨트롤러를 사용하여 관리됩니다. 즉, 하위보기 컨트롤러 집합을 "관리"하고 내부 메시징 및 전환을 처리하는보기 컨트롤러입니다. 가장 일반적인 경우는 UINavigationController와 UITabBarController이며, iPad에서는 UISplitViewController와 PageViewControllers도 볼 수 있습니다.

iOS5를 통해 Apple은 소위 "View Controller Containment"를 사용하여 포함 된 VC의 변경 사항을 컨테이너보기 컨트롤러 (일반보기 컨트롤러)에 알리는 방법을 제공했습니다. WWDC 2011에서 가져 와서 iTunes에 게시 된 비디오가 있습니다 (등록 된 개발자 만 해당). 기본적으로이 방법론은 포함 된 VC 구조의 변경 사항을 컨테이너보기 컨트롤러에 알리는 데 사용할 수있는 몇 가지 방법을 추가합니다. 여기에 자세히 설명하지 않고 WWDC 비디오를 보시고 this stack overflow answer 또는 this post을 읽으시기 바랍니다. 나는 후자가 당신이 찾고있는 것과 정확히 같다고 생각합니다.

+0

비디오 이름은 무엇입니까? –

+0

비디오의 이름은 "Implementing UIViewController Containment", 세션 102, 2011 년 6 월 15 일입니다. iTunes Store를 통해 비디오에 액세스 할 수 있습니다. – smileBot

0

UIViewController 사이를 전환하려면 UINavigationController를 사용해야합니다. UIViewController에

[[self view] addSubview:view1]; 

내가 다른 포스터가 말했듯이 견해

view1.hidden = YES; 
view2.hidden = NO; 
+0

Interface Builder에서 볼 수 있습니까? –