UIPageviewcontroller:从中间开始



不幸的是,搜索没有帮助我...我有以下问题:我有三个UItableviews(ViewController1,ViewController2和Viewcontroller3),我将它们嵌入到故事板的简单PageViewController屏幕截图中(我还不能在这里插入任何图片:/)。

为了显示三个 ViewController,我将它们放入我的 PageViewController.m(PageViewController 的自定义类)的 viewdidload 中的一个数组中,所以我没有使用 ViewController 作为容器将其他 ViewController 放入:

-(void)viewDidLoad
{
    [super viewDidLoad];
    
    self.delegate = self;
    self.dataSource = self;
    
    UIViewController *p1 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"TableView1"];
    UIViewController *p2 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"TableView2"];
    UIViewController *p3 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"TableView3"];
    
    myViewControllers = @[p1,p2,p3];
    
我可以选择从哪个视图控制器开始,然后选择

- 前进(方向: UIPageViewControllerNavigation**DirectionForward** ):

        [self setViewControllers:@[p1]
                       direction:UIPageViewControllerNavigationDirectionForward
                        animated:NO completion:nil];
        
        NSLog(@"loaded!");
    }

或选择最后一个并倒退UIPageViewControllerNavigation**DirectionReverse**):

        [self setViewControllers:@[p3]
                   direction:UIPageViewControllerNavigationDirectionReverse
                   animated:NO completion:nil];
      

但是,我一直在试图弄清楚如何从ViewController2开始,并在左侧Viewcontroller1,在右侧ViewController3(cp。 截图)

任何建议或代码片段将不胜感激!

这是整个代码:

#import "StartScreenPageViewController.h"
@interface StartScreenPageViewController ()
@end
@implementation StartScreenPageViewController
{
    NSArray *myViewControllers;
}
-(void)viewDidLoad
{
    [super viewDidLoad];
    
    self.delegate = self;
    self.dataSource = self;
    
    UIViewController *p1 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"1"];
    UIViewController *p2 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"2"];
    UIViewController *p3 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"3"];
    
    myViewControllers = @[p1,p2,p3];
    
    [self setViewControllers:@[p1]
                   direction:UIPageViewControllerNavigationDirectionForward
                    animated:NO completion:nil];
    
    NSLog(@"loaded!");
}
-(UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
    return myViewControllers[index];
}
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
     viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];
    
    --currentIndex;
    currentIndex = currentIndex % (myViewControllers.count);
    return [myViewControllers objectAtIndex:currentIndex];
}
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
      viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];
    
    ++currentIndex;
    currentIndex = currentIndex % (myViewControllers.count);
    return [myViewControllers objectAtIndex:currentIndex];
}
-(NSInteger)presentationCountForPageViewController:
(UIPageViewController *)pageViewController
{
    return myViewControllers.count;
}
-(NSInteger)presentationIndexForPageViewController:
(UIPageViewController *)pageViewController
{
    return 0;
}
@end

您应该能够在 viewDidLoad 中设置初始视图控制器。您已经在这样做了,但您正在将其设置为第一个视图控制器:

 [self setViewControllers:@[p1]
                   direction:UIPageViewControllerNavigationDirectionForward
                    animated:NO completion:nil];

我认为您应该能够将其更改为:

 [self setViewControllers:@[p2]
                   direction:UIPageViewControllerNavigationDirectionForward
                    animated:NO completion:nil];

然后,只需确保pageViewController:viewControllerAfterViewControllerpageViewController:viewControllerBeforeViewController方法根据所需的功能处理数据源的上下迭代。

最新更新