6

我正在寻找UIPageViewController与 Xcode 的故事板一起使用。我能找到的唯一例子是这个关于如何UIPageViewcontroller使用单独的 xib 文件实现的教程。

但是在本教程中,它UIPageViewController是在扩展类中以编程方式实例化的UIViewController。这使得翻译故事板如何解释UIPageViewcontroller(作为其自身的实例)变得复杂。

任何有关如何UIPageViewController使用 Xcode 的故事板创建功能的帮助将不胜感激。

更新:我设法通过使用默认页面控制器模板在 Xcode 中创建一个新项目来解决此问题。它使用了故事板并且很容易理解。

4

3 回答 3

8

更新:我设法通过使用默认页面控制器模板在 xcode 中创建一个新项目来解决此问题。它使用了故事板并且很容易理解。

于 2012-04-23T19:09:27.090 回答
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 开始,然后根据需要开始调用您的数据源和委托方法。

于 2013-11-26T14:34:46.210 回答
1

使用 Xcode 7 有一种简单的方法可以做到这一点。让 ViewController 成为您的数据源并在一个 Storyboard 场景中委托,并将您的 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
        }
    }
}
于 2016-01-25T17:23:15.633 回答