2012-04-11 189 views
6

使用UIPageViewController我期待與Xcode的故事板使用UIPageViewController。我能找到的唯一例子是this tutorial關於如何使用單獨的xib文件實現UIPageViewcontroller在故事板

但是,在本教程中,UIPageViewController以延伸UIViewController的類內編程實例化。這使得翻譯故事板如何解釋UIPageViewcontroller(它本身就是一個實例)變得很複雜。

如何建立一個有效的UIPageViewController用Xcode的故事板任何幫助將非常感激。

更新:我設法通過使用默認的pagecontroller模板在Xcode中創建一個新項目來解決此問題。它使用了故事板,並且很容易遵循。

+0

很高興聽到你的問題就解決了 - 你應該張貼您的解決方案作爲一個答案(並接受答案明天),讓其他人尋求幫助,關於這個問題可以找到它。 – rickster 2012-04-12 18:54:29

回答

8

更新:我設法使用默認的PageController模板在Xcode中作出新的項目,以解決此問題。它使用了故事板,並且很容易遵循。

+1

Apple默認代碼也以編程方式實例化了UIPageViewController ... – 2014-05-23 14:43:18

7

設置Xcode項目是一個PageViewController是實現該目標的一種方式,但是如果你想有一個已經存在的故事板內的PageViewController你可以做到這一點。

如果拖放PageViewController場景到故事板和電線了SEGUE,你可以把該PageViewController。不過,故事板中似乎存在一些錯誤,用於正確設置PageViewController,例如,您無法連接委託和數據源。

圍繞這一個簡單的方法是簡單地連線委託/數據源在你的init方法:

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

這將導致你的委託和數據源的方法來正確地叫,假設當然你想要的數據源並委託成爲PageViewController。一旦設置完成,您需要確保在視圖加載時有一個視圖控制器。您可以在您的viewDidLoad上PageViewController類setViewControllers方法做到這一點:

- (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"); 
    }]; 
} 

在創建PageViewController,它會與你sweetViewController開始,然後根據需要開始打電話給你的數據源和委託方法。

0

這裏有一個簡單的方法在Xcode 7.要做到這一點有ViewController中,這將是你的一個故事板場景的數據源和委託,與你UIPageViewController嵌入ContainerView。然後在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 
     } 
    } 
}