更新
在我的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 很好。我只是无法触发它的数据源方法,这意味着没有其他视图控制器加载。