2014-11-30 5 views
1
인터넷에서 아무데도

내가 기본 엑스 코드 페이지 기반 응용 프로그램에서이 코드를 가지고 당신의 UIViewController 에 PageViewController를 구현하는 방법을 설명입니다스위프트 - 구현 PageViewController 하나의 UIViewController에

class ViewController: UIViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource { 
    var pageViewController: UIPageViewController? 
    override func viewDidLoad() { 
     self.pageViewController = UIPageViewController(transitionStyle: .PageCurl, navigationOrientation: .Horizontal, options: nil) 
     self.pageViewController!.delegate = self 
     self.view.addSubview(self.pageViewController!.view) 
     // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages. 
     var pageViewRect = self.view.bounds 
     self.pageViewController!.view.frame = pageViewRect 
     self.pageViewController!.didMoveToParentViewController(self) 
     // Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily. 
     self.view.gestureRecognizers = self.pageViewController!.gestureRecognizers 
    } 

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
    //?? what controller should I return 
    } 
    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 
    //?? what controller should I return 
    } 
} 

내가 6 페이지를 갖고 싶어하고 내가 원하는 다른 페이지에 텍스트를 추가하려면 내가 어떤 페이지인지 인식하고 내가 원하는 정보를 보여줄 수 있습니까? 하나의 ViewControler 만 사용하려는 경우이보기 컨트롤러 만 사용하십시오.

답변

2

에는 다른보기 컨트롤러를 사용해야합니다. 특정 페이지에 대한 로직을 구현하는 다른 뷰 컨트롤러를 제시하는 것이 유일한 "부모"또는 "루트"뷰 컨트롤러를 갖도록 코드를 리팩토링해야 할 수 있습니다. 다음은 몇 가지 샘플 코드입니다. 그것은 지나치게 단순화되어 있지만 어떻게 갈 지에 대한 아이디어를 제공해야합니다.

class PageContent { 
    let text: String 
    let index: Int 
    init(text: String, index: Int) { 
     self.text = text 
     self.index = index 
    } 
} 

class MyPageViewController : UIViewController { 
    var page: PageContent! 
    override func viewDidLoad() { 
     // Load page data for self.page 
    } 
} 

class ViewController: UIViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource { 
    var pageViewController: UIPageViewController? 
    var pages: [PageContent]! 

    override func viewDidLoad() { 
     let firstPage = PageContent(text: "...", index: 0) 
     let secondPage = PageContent(text: "...", index: 1) 
     // ... 
     self.pages = [firstPage, secondPage] // add more as necessary 
    } 

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
     let beforeController = viewController as MyPageViewController 
     let newPageIndex = beforeController.page.index - 1 
     if newPageIndex >= 0 { 
      let newController = MyPageViewController() 
      newController.page = self.pages[newPageIndex] 
      return newController 
     } else { 
      return nil 
     } 
    } 

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 
     let afterController = viewController as MyPageViewController 
     let newPageIndex = afterController.page.index + 1 
     if newPageIndex < self.pages.count { 
      let newController = MyPageViewController() 
      newController.page = self.pages[newPageIndex] 
      return newController 
     } else { 
      return nil 
     } 
    } 
} 
+0

'newController.page = viewController.page - 1'과 는'newController.page = viewController.page + 1' 오류를 출력 ... 그리고 MyPageViewController에서 방법의 viewDidLoad에서 페이지에 대한 정보를 추가? if (page == 1) {...} else if (page == 2) {...} ...? –

+0

오류의 스크린 샷에 링크 할 수 있습니까? 또는 오류 텍스트? – pwightman

+0

아, 죄송합니다.보기 컨트롤러를 전송하는 것을 잊었습니다. 코드 스 니펫이 업데이트되었습니다. – pwightman

관련 문제