使用 uitableviewcell 内的 uiscrollview 设置页面控件

Posted

技术标签:

【中文标题】使用 uitableviewcell 内的 uiscrollview 设置页面控件【英文标题】:Set up page control with uiscrollview that is inside uitableviewcell 【发布时间】:2015-10-10 22:42:45 【问题描述】:

我有一个 UITableViewController。在我的一个原型单元格中,有一个带有水平分页和页面控件的 UIScrollView。我已经在 storyboard 中进行了设置,布置了将在 UIScrollView 的每个页面上显示的所有元素,这正是我过去在 UIViewController 中设置滚动视图的方式。由于这个 UIScrollView 在 UITableViewCell 内,我对如何连接页面控件感到困惑。

1) 更改页面控件的代码是否应该在单元格类文件中?如果是这样,那会是什么样子?

2) 我还要在 UITableViewController 内还是在 UITableViewCell 类文件内实现 UIScrollViewDelegate?

(这是在objective-c中)

【问题讨论】:

【参考方案1】:

在单元类中包含UIPageControl 代码似乎是最合适的选择。显示表格/单元格的视图控制器不应该委派这种类型的内部行为。

如果您在单元类中实现代码,则单元类需要符合UIScrollViewDelegate 协议才能接收scrollViewDidScroll: 消息。不会涉及表视图控制器。

这就是方法的样子:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

    CGFloat pageIndex = self.scrollView.contentOffset.x / CGRectGetWidth(self.scrollView.frame);
    self.pageControl.currentPage = lround(pageIndex);

还要确保将滚动视图上的 pagingEnabled 属性设置为 YES。

【讨论】:

谢谢!我有我的 scrollViewDidScroll 函数,因为我之前已经完成了分页滚动视图,但是我不确定如何在单元格类中执行此操作。如果我把它放在单元类中,我在哪里调用这个函数?第二个问题:我在哪里放置 scrollViewDidScroll 页面本身的代码?也就是说,将填充页面的数据。以前我在包含滚动视图的视图控制器上执行此操作。 所以在单元类中,您需要将该类设置为滚动视图的委托,并像在视图控制器中那样在单元类中实现 scrollViewDidScroll 方法,它会被调用滚动视图,因为它是一个常规的委托方法。 如果滚动视图的内容在用户滚动时动态填充,那么您可以将表格视图控制器设置为每个单元格滚动视图的滚动视图委托,然后将单元格的 scrollViewDidScroll 方法公开,设置一个单元格上的新委托方法(cellNeedsContentForPageAtIndex:),或者最简单的方法是在单元格上设置一个块来配置页面(void (^pageBlock)(id sender, NSInteger pageIndex))。 好的,我会尝试所有这些,让您知道它是否有效,如果无效,请返回更多问题。 ;) 我的部分答案被删除了,应该是:在单元格上设置一个新的委托方法,该方法由表视图scrollViewDidScroll调用

以上是关于使用 uitableviewcell 内的 uiscrollview 设置页面控件的主要内容,如果未能解决你的问题,请参考以下文章

多行 UILabel 在 UITableViewCell 内的较小 iPhone 中截断或剪切字符串

无法在 xcuitestcase 的 uitableviewcell 内的 uistackview 中找到带有图像的 uibutton

UITableViewCell 内的 UIStackView

使用 uitableviewcell 内的 uiscrollview 设置页面控件

如何使用 Swift 从 UITableViewCell 内的 NIB 调整自定义 UIView 的大小?

无法更改 UITableViewCell 内的 UIButton 图像