3

更新

在我的tableView:cellForRowAtIndexPath:中,如果我这样做,我可以让事情正常工作:

[self addChildViewController:scroller];
[cell.contentView addSubview:scroller.view];
[scroller didMoveToParentViewController:self];

但是,现在由于单元格重用,如果我在 5 个图像上滑动第一行,然后向下滚动表格,使第一行不在屏幕上,当我向上滚动回第一行时,该幻灯片已重置回第一张图像。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~

我有一个 UITableView 占据了屏幕的整个宽度/高度。

在每个单元格中,我希望用户能够水平滚动一组图像。

我正在使用 UIPageViewController 来处理滚动和延迟加载。我可以让我的第一张图片完美加载,但是当我尝试滚动到下一张图片时,没有调用 UIPageViewController 的 dataSource 方法。

如果我完全删除 dataSource 方法,每个单元格中的图像根本不会滚动/移动。但是,使用适当的 dataSource 方法,我至少可以获得弹跳运动,但之前或之后没有加载任何内容。

-tableView:cellForRowAtIndexPath:

// MyScrollerPageViewController is a subclass of UIPageViewController
MyScrollerPageViewController *scroller = [[MyScrollerPageViewController alloc] initWithItems:self.items];
[cell.contentView addSubview:scroller.view];

MyScrollerPageViewController(UIPageViewController 的子类)

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.dataSource = self;
    self.delegate = self;

    MyImageViewController *viewController = [[MyImageViewController alloc] initWithImage:self.items[0]];
    [self setViewControllers:@[viewController]
                   direction:UIPageViewControllerNavigationDirectionForward
                    animated:false
                  completion:nil];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    // THIS NEVER GETS CALLED
    NSLog(@"BEFORE!");
    return nil;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    // THIS NEVER GETS CALLED
    NSLog(@"AFTER!");
    return nil;
}

重申一下,我可以很好地加载第一个图像,这告诉我 UIPageViewController 的子类正在加载它的第一个 viewController 很好。我只是无法触发它的数据源方法,这意味着没有其他视图控制器加载。

4

0 回答 0