在故事板中使用UIPageViewController

6
我想使用Xcode的storyboard来使用UIPageViewController。我找到的唯一示例是在此教程中,该教程展示了如何使用单独的xib文件来实现UIPageViewcontroller
然而,在这个教程中,UIPageViewController是在扩展UIViewController的类中以编程方式实例化的。这使得将其转换为storyboard如何解释UIPageViewcontroller变得复杂(它作为一个独立的实例)。
非常感谢任何关于如何在Xcode的storyboard中创建一个运行良好的UIPageViewController的帮助。
更新:我通过使用Xcode中的默认页控制器模板来创建新项目解决了这个问题。它使用了storyboard,并且很容易跟随。

很高兴听到您的问题已经解决 - 您应该将解决方案发布为答案(并在明天接受答案),以便其他寻求帮助的人可以找到它。 - rickster
3个回答

8

更新:我成功解决了这个问题,方法是使用Xcode中的默认页面控制器模板创建一个新项目。它使用了故事板,并且很容易跟进。


1
苹果的默认代码也以编程方式实例化了UIPageViewController程序... - Rog

7

将Xcode项目设置为PageViewController是一种实现此目的的方法,但是如果您想在已经存在的storyboard中包含一个PageViewController,则也可以这样做。

如果您将PageViewController场景拖放到Storyboard上并连接segue,您可以推到该PageViewController。 但是,在设置PageViewController时,Storyboard中似乎存在一些错误,例如您无法连接委托和数据源。

一个简单的解决方法是在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开始,并在需要时调用您的数据源和代理方法。

1
使用Xcode 7有一种简单的方法来实现这一点。在一个Storyboard场景中,将成为您数据源和委托的ViewController与嵌入到ContainerView中的UIPageViewController放置在一起。然后在您的ViewController的prepareForSegue方法中捕获UIPageViewController。
例如,在Swift中:
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
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接