检测 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 似乎并不总是在滚动时发生变化

UIPageControl - 单击按钮更改页面

UIPageControl 显示不正确的页面

UIPageControl(页面控件)不显示在 UIPageViewController

崩溃:[UIPageControl] 页面越界。请求 0 但页面控件只有 0 个页面:为啥?

UIPageControl + UIScrollView 没有正确计算页面