gpt4 book ai didi

iphone - UIPageViewController 错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:10:45 24 4
gpt4 key购买 nike

在我的项目中,我使用了一个 UIPageViewController,我在其中添加了 Storyboard中的一些 viewController。我在这里做了一个非常简单的示例项目: http://www.2shared.com/file/Rz0G1b5C/pageScroll.html (选择 iPhone 模拟器)如您所见,我得到错误 The number of provided view controllers (3) doesn't match the number of required (1) for the requested spine location(在我的真实项目中它transition 而不是 spine location 但是我所做的一切都与我的真实项目相同。我已经搜索了堆栈溢出但找不到我的问题的任何答案.

最佳答案

当我第一次使用页面 View Controller 时,我很难弄清楚这一点,但这是因为你一次向页面 View Controller 提供所有 View Controller ,所以它试图同时显示 3但是这种类型的书脊一次只支持 1 个 View Controller 。为什么一次需要超过 1 个?如果你把书脊放在页面的中间(我想在 iPad 上更常见),你可以同时显示两个 View Controller ,所以你需要每次将一个数组馈送到页面 View Controller 。在大多数情况下,您只想显示一个,因此当您运行 setViewControllers 时,您应该只将您的初始 页面作为一个对象数组放入 Controller 中。

要翻转页面,您需要将示例代码中的页面 View Controller 设置为 UIPageViewControllerDataSource,然后使用这些函数来调入调出您想要的 Controller 。数据源提供了 viewControllerAfterViewControllerviewControllerBeforeViewController 函数,您可以使用它们来确定数组中下一个 View Controller 。你的数组和你的 Controller 一样在本地声明,所以当我这样做时对我有用的一种方法是使数组成为你在整个页面 View Controller 中引用的头文件中的变量,而不是在本地声明它viewDidLoad 就像您在示例中所做的那样。像您当前在 viewDidLoad 中那样填充它,但随后仅将包含 first 对象的数组发送到 setViewControllers

NSArray *initialViewControllers = [[NSArray alloc] initWithObjects:[viewControllersArray objectAtIndex:0], nil];
[self setViewControllers:initialViewControllers
direction:UIPageViewControllerNavigationDirectionForward
animated:YES
completion:^(BOOL finished){
NSLog(@"call back success");}];

因此,在那些数据源函数中,您找出当前 View Controller 在 View Controller 数组中的位置,然后返回下一个索引中的那个,对于 viewControllerAfterViewController,或者在上一个索引,对于 viewControllerBeforeViewController:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
if ([viewControllersArray containsObject:viewController]) {
NSInteger index = [viewControllersArray indexOfObject:viewController];
if (index < [viewControllersArray count] && index > 0) {
return [viewControllersArray objectAtIndex:(index - 1)];
}
}
return nil;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
if ([viewControllersArray containsObject:viewController]) {
NSInteger index = [viewControllersArray indexOfObject:viewController];
if (index < [viewControllersArray count] - 1) {
return [viewControllersArray objectAtIndex:(index + 1)];
}
}
return nil;
}

通过实现这些功能,您一次在页面 View Controller 中只有一个 View Controller ,您可以根据需要将它们分页进出。它们存储在您的 viewControllerArray 中,因此您可以返回到您离开的同一 Controller 。

关于iphone - UIPageViewController 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15788458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com