2012-04-11 9 views
6

Xcode의 스토리 보드에 UIPageViewController을 사용하려고합니다. 내가 찾을 수있는 유일한 예는 별도의 xib 파일을 사용하여 UIPageViewcontroller을 구현하는 방법에 대해 this tutorial입니다.스토리 보드에서 UIPageViewController 사용

그러나이 자습서에서는 을 확장하는 클래스 내에서 UIPageViewController이 프로그래밍 방식으로 인스턴스화됩니다. 이로 인해 스토리 보드에서 UIPageViewcontroller (자체 인스턴스로 해석 함)을 해석하는 방법이 복잡해집니다.

Xcode의 스토리 보드로 작동하는 UIPageViewController을 만드는 방법에 대한 도움을 주시면 감사하겠습니다.

업데이트 : 기본 pagecontroller 템플릿을 사용하여 Xcode에서 새 프로젝트를 만들면이 문제를 해결할 수있었습니다. 그것은 스토리 보드를 사용했고 쉽게 따라 할 수있었습니다.

+0

문제가 해결 듣고 다행 - 당신은 답변으로 솔루션을 게시 (그리고 대답 내일 동의) 다른 사람들이 그것을 찾을 수있는 주제에 도움을 찾고 있도록해야한다. – rickster

답변

8

업데이트 : 기본 pagecontroller 템플릿을 사용하여 xcode에서 새 프로젝트를 만들면이 문제를 해결할 수있었습니다. 그것은 스토리 보드를 사용했고 쉽게 따라 할 수있었습니다.

+1

Apple 기본 코드가 프로그래밍 방식으로 UIPageViewController를 인스턴스화했습니다. –

7

Xcode 프로젝트를 PageViewController로 설정하면이 작업을 수행 할 수 있습니다. 그러나 이미 존재하는 스토리 보드에 PageViewController를 포함 시키려면이 작업을 수행 할 수도 있습니다.

PageViewController Scene을 스토리 보드로 드래그 앤 드롭하고 Segue를 연결하면 해당 PageViewController로 이동할 수 있습니다. 그러나 PageViewController를 올바로 설정하기 위해 스토리 보드에 몇 가지 버그가있는 것으로 보입니다. 예를 들어 위임자와 데이터 소스를 연결할 수 없습니다. 당신이 데이터 소스를 원하는 물론 가정, 제대로 호출 할

- (instancetype) initWithCoder:(NSCoder *)aDecoder 
{ 
    if(self = [super initWithCoder:aDecoder]) 
    { 
     self.delegate = self; 
     self.dataSource = self; 
    } 
    return self; 
} 

이 대리인 및 데이터 소스 방법의 원인이됩니다

이 주위에 쉬운 방법은 간단하게 초기화 메서드에 대리자/데이터 소스를 연결할 것입니다 대표자는 PageViewController가됩니다. 이 설정이 완료되면 뷰가로드 될 때 뷰 컨트롤러가 있는지 확인해야합니다. 당신은 당신의 viewDidLoad에서 PageViewController 클래스에 setViewControllers 방법으로이 작업을 수행 할 수 있습니다 PageViewController가 생성되면, 그것은 당신의 sweetViewController로 시작하고 필요에 따라 데이터 소스 및 위임 메소드를 호출 시작

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self setViewControllers:@[sweetViewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) { 
     NSLog(@"Hooray I set my initial viewcontroller for my page view controller"); 
    }]; 
} 

.

0

Xcode 7에서이 작업을 수행하는 쉬운 방법이 있습니다. 사용자의 데이터 소스가 될 ViewController와 UIPageViewController가 ContainerView에 임베드 된 한 Storyboard Scene에서 위임하도록하십시오. 그런 다음 ViewController의 prepareForSegue 메서드에서 UIPageViewController를 캡처합니다.

스위프트의 :

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if let identifier = segue.identifier where identifier == "yourPageVCIdentifier"{ 
     if let pageController = segue.destinationViewController as? UIPageViewController { 
      pageController.dataSource = self 
      pageController.delegate = self 
      self.pageVC = pageController 
     } 
    } 
} 
관련 문제