컨테이너보기 컨트롤러 예 [닫힌]


94

컨테이너 뷰 컨트롤러로 사용자 지정 뷰 컨트롤러를 만드는 좋은 예를 누구든지 알려줄 수 있습니까? 내가 찾을 수있는 유일한 문서는 UIViewController Class Reference 에있는 몇 개의 단락입니다 . 그것보다 조금 더 많은 정보가 필요하다고 생각하고 예제 구현이 좋을 것입니다. 구글은 아무것도 발견하지 못했다.

나는 특히 방법에 관심이 있습니다.

transitionFromViewController:toViewController:duration:options:animations:completion:

언급 한 하이퍼 크립트 외에 다른 소스를 찾았습니까?
John Estropia

1
아직. 시간이 있으면 오늘 나중에 또 다른 발굴을 할 것입니다. 그것이 얼마나 중요하고 유용한지를 고려할 때 그것에 대한 정보가 너무 적다는 것은 기괴한 것처럼 보입니다. 버그가 있는지 궁금하고 개선되면 더 잘 문서화 될 것입니다.
Undistraction

3
이것은 나에게 매우 혼란 스럽습니다. 예를 들어 뷰에는 하나의 내장 컨트롤러 만있을 수 있습니다. 해당 컨테이너보기에서 컨트롤러를 전환하려면 어떻게해야합니까?
user4951

@JanakNirmal 많은 의무가 있습니다.
Undistraction

난 컨테이너보기 숨길 수 있습니다
Maulik 샤

답변:


51

지금까지 내가 찾은 가장 좋은 것은 WWDC 2011 세션 비디오 세션 102-UIViewController Containment 구현 입니다.


1
같게. 내가 가장 좋아하는 데모 코드 예제는 아니지만 VC 컨테이너와 메모리 관리를 제대로 구현합니다. 자식 뷰 컨트롤러가 더 이상 표시되지 않을 때 해제되는 것이 정말 중요합니다.
memmons

1
불행하게도, 그는 자신의 아이 패드 :-(에 전자 메일 설정을하지 않았기 때문에 ContainerViewController 작동하지 않았다 사용하는 방법에 대한 데모
켄 M. Haggerty

해당 세션에 코드 샘플이 있습니까?
user4951 2010 년

당신은 지금 샘플 코드를 가지고 있습니까, 나는 많은 것을 시도했지만 아직 용질이 없기 때문에 필요합니다.
iPhone 프로그래밍 방식으로

37

WWDC 세션 비디오 세션 102- 하이퍼 크립트가 이미 언급 한 UIViewController 포함 구현 외에도 "iOS에서보기 컨트롤러의 진화"에 대한 Apple WWDC 2012 세션 도이 주제를 다루며 예제 코드는 샘플 코드 패키지의 일부입니다.

https://developer.apple.com/devcenter/download.action?path=/wwdc_2012/wwdc_2012_sample_code/wwdc_2012_session_code.dmg

여기에 예제도 있습니다 : https://github.com/toolmanGitHub/stackedViewControllers


2
+1은 그 망할 코드 패키지를 어디서 구할 수 있는지 언급합니다. 나는 그것을 통해 찾고 있었다.
user4951

6
다시 +1하십시오. 왜 Apple이 회원 페이지에 WWDC 세션 코드를 넣을 수 없습니까?
axello

+1,이 소스 코드 경로를 얻는 방법을 공유 하시겠습니까?
Janak Nirmal

1
@JanakNirmal 어떤 소스 코드를 얻는 데 문제가 있습니까? WWDC 코드를 얻으려면 dmg 링크를 따라 Apple 개발자 ID로 로그인하십시오.
JosephH

17
- (void)viewDidLoad{
    [super viewDidLoad];

    // I put self in a Navigation VC so we can use its right navigationbar 
    // item for triggering the transition
    self.navigationItem.rightBarButtonItem = 
     [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                                                    target:self 
                                                    action:@selector(button:)] 
                                                                  autorelease];

    // create test1 and test2 instance (subclass UIViewController and 
    // also need to define their own nibs)
    vc1 = [[test1 alloc]initWithNibName:@"test1" bundle:nil];
    vc2 = [[test2 alloc]initWithNibName:@"test2" bundle:nil];

    //add to the container vc which is self    
    [self addChildViewController:vc1];
    [self addChildViewController:vc2];

    //the entry view (will be removed from it superview later by the api)
    [self.view addSubview:vc1.view];
}

이 IBAction은 두 VC 간의 전환을 트리거합니다.

-(IBAction)button:(id)sender {
    [self transitionFromViewController:vc1 
                      toViewController:vc2 
                              duration:0.5    
                               options:UIViewAnimationOptionTransitionCurlDown 
                            animations:nil 
                            completion:nil];
}

1
이것은 좋은 예입니다. 그러나이 경우 메모리 관리를 개선 할 수 있습니다 : 더 적합한 솔루션을 위해 stackoverflow.com/a/8453677/849616 .
Vive

1
당신이 틀렸다는 것은 아닙니다. 하지만 [self addChildViewController : vc1]; 말이되지 않습니다. 컨테이너 VC에는 여러 컨테이너보기 컨트롤러가있을 수 있습니다.
user4951

@Vive 프로젝트에서 메모리 관리에 대해 걱정하는 지점에 도달했습니다. 특히 게시 한 링크가 메모리 관리 측면에서 더 나은 점이 무엇인지 말씀해 주시겠습니까? 나는 아주 새로운 오전과 힘든 시간 불일치를보고있다
jacobronniegeorge


10

4
사실 나는 이미 그것을 발견했지만 안타깝게도 Ios4에 대해 작성되었지만 5는 중요한 변경을가했습니다. Apple은 이제 사용자 지정 View Controller 컨테이너 생성을 명시 적으로 지원하지만, 사용 방법을 찾는 데 도움을주고 싶지 않은 것 같습니다. 그래도 고마워.
Undistraction 11

그들이 말하는 곳을 보여줄 수 있습니까? 당신을 의심하지 않고 호기심이 많습니다.
Rui Peres 2011 년

4
걱정 마. 나는 그의 컨테이너 클래스에 대한 코드를 살펴 보았고 그들 중 누구도 다음 메소드 중 하나를 사용하지 않았습니다. UIViewController에 대한 ios5 문서.
Undistraction 11


3

이 주제에 대해 제가 가장 좋아하는 (iOS7 지원) 튜토리얼 / 예제입니다 (3 개 모두 github에서 사용할 수있는 소스 코드가 있음).

컨트롤러 격리보기

사용자 지정 컨테이너보기 컨트롤러 전환

대화 형 사용자 지정 컨테이너보기 컨트롤러 전환

그리고 물론 애플은 내가 중요하다고 생각하는 주제에 대한 전체 글을 제공합니다.

사용자 지정 컨테이너보기 컨트롤러 만들기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.