ios - 具有多个 View 的 UIPageViewController

标签 ios objective-c iphone uipageviewcontroller

我需要一个动态的 UIPageViewController,页面的数量取决于我的数组的项目数量。

对此我有两种看法。一个用于第一页,另一个用于其他页面。它总是超过 2 页(我的数组中有两个项目)。

我正在尝试使用固定值进行测试。但是分页是不对的。索引不正确。

第一个问题,presentationCountForPageViewController [_vc count] 返回 nil;

第二个问题,分页不对。我到达最后一页,第一个 View 消失了,所以如果我返回,转到第二个 View ,总是...

请帮忙!

    - (void)viewDidLoad {
        [super viewDidLoad];

        FirstViewController *agenda = (FirstViewController*)[self viewControllerAtIndex:0];
        [_vc addObject:@"FirstViewController"];
        [_vc addObject:@"SecondViewController"];


        self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
        self.pageViewController.dataSource = self;


        NSArray *viewControllers = [NSArray arrayWithObject:agenda];

        [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];


        [self addChildViewController:_pageViewController];
        [self.view addSubview:_pageViewController.view];
        [self.pageViewController didMoveToParentViewController:self];

        UIPageControl *pageControlAppearance = [UIPageControl appearanceWhenContainedIn:[UIPageViewController class], nil];
        pageControlAppearance.pageIndicatorTintColor = [UIColor lightGrayColor];
        pageControlAppearance.currentPageIndicatorTintColor = [UIColor darkGrayColor];


    }




- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{

    NSUInteger index = [_vc indexOfObject:viewController];

    if ((index == 0) || (index == NSNotFound)) {
        return nil;
    }

    index--;

    //notice here I call my instantiation method again essentially duplicating work I have already done!
    return [self viewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = [_vc indexOfObject:viewController];

    if (index == NSNotFound) {
        return nil;
    }

    index++;
    return [self viewControllerAtIndex:index];
}


#pragma mark - Page View Controller Data Source

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index
{

    if (index == 0){
        FirstViewController *firstController = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];

        return firstController;
    }
    else{
        SecondViewController *secondController = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
        return secondController;
    }

}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
    return [_vc count];
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
    return 0;
}

最佳答案

根据评论/聊天,有几件事需要解决:

  1. 您需要实例化 _vc 数组
  2. 您需要将UIViewController对象添加到此数组,而不是您当前使用的字符串
  3. 您需要修改 viewControllerBeforeViewControllerviewControllerAfterViewController 方法以从 _vc 数组返回相关元素,记得测试索引是否保持在数组的范围内,以防止在最后一页之外或第一页(议程)之前滑动。

关于ios - 具有多个 View 的 UIPageViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29055404/

相关文章:

ios - 如何以编程方式在 XLForm 中选择 XLFormRowDescriptor?

ios - STHTTPRequest多图上传

objective-c - 如何使用单个按钮和单个操作方法显示/隐藏 UIPopoverController

javascript - jQuery fancybox click function for dynamically added content not firing on iOS, iPhone, or iPad

iphone - 在 Core Graphics 和 CorePlot 中用 'raised effect'/gradient 画一条线

ios - 在 Swift 中获取嵌套包装变量的值

ios - 符合协议(protocol)的类 - 编译时检查

iphone - valueForKey 只返回内存地址而不返回实际值

iphone - CABasicAnimation 重复自身

ios - 如何为公司员工部署公司React-Native应用程序?