检测 UIPageControl 页面变化
Posted
技术标签:
【中文标题】检测 UIPageControl 页面变化【英文标题】:Detect UIPageControl page change 【发布时间】:2017-08-09 16:25:52 【问题描述】:我想在UICollectionViewCell
中添加一个UIPageController
。我创建了一个自定义 nib 文件,其中包含 collectionViewCell
。在单元格内,我添加了一个UIPageControl
。
@IBOutlet weak var pageControl: UIPageControl!
override func awakeFromNib()
super.awakeFromNib()
self.isUserInteractionEnabled = true
pageControl.isUserInteractionEnabled = true
self.backgroundColor = UIColor.darkGray
setupPageControl()
private func setupPageControl()
pageControl.numberOfPages = 7
pageControl.translatesAutoresizingMaskIntoConstraints = false
pageControl.currentPageIndicatorTintColor = UIColor.orange
pageControl.pageIndicatorTintColor = UIColor.lightGray.withAlphaComponent(0.8)
如何检测页面变化?点也在视图的中间,可以把它们放在中间吗?
【问题讨论】:
【参考方案1】:来自Apple Documentation
当用户点击页面控件移动到下一页或上一页时, 控件发送 valueChanged 事件以供 代表。然后,委托可以评估 currentPage 属性以 确定要显示的页面。页面控件只前进一页 在任一方向。当前查看的页面以白色表示 点。根据设备,显示一定数量的点 在剪辑之前在屏幕上显示。
你也可以使用
func scrollViewDidEndDecelerating(scrollView: UIScrollView)
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
pageControl.currentPage = Int(pageNumber)
【讨论】:
稍后我会尝试您的解决方案,谢谢。但它写道,改变是通过点击控制器发生的,而且在我的解决方案中,实际上不可能滑动到下一个视图。这是正常的吗?我应该使用 uipageviewcontroller,然后在其上放置 uiviewcontrole,而不是直接将 uiviewcontrol 放置在 collectionviewcell 上吗?【参考方案2】:斯威夫特 5
1) 添加目标
您可以在 setupPageControl 函数中添加一个检测值变化的目标:
private func setupPageControl()
pageControl.numberOfPages = 7
pageControl.translatesAutoresizingMaskIntoConstraints = false
pageControl.currentPageIndicatorTintColor = UIColor.orange
pageControl.pageIndicatorTintColor = UIColor.lightGray.withAlphaComponent(0.8)
pageControl.addTarget(self, action: #selector(pageControlHandle), for: .valueChanged)
创建一个选择器来改变你想要的值:
@objc private func pageControlHandle(sender: UIPageControl)
print(sender.currentPage)
【讨论】:
以上是关于检测 UIPageControl 页面变化的主要内容,如果未能解决你的问题,请参考以下文章
UIPageControl(页面控件)不显示在 UIPageViewController