我如何在Swift中实现UIPageControl

好吧,我在这里挣扎,一直没有find一个工作的解决scheme。 我一直在自学Swift没有Objective C的经验(我知道,我知道)。

在我的应用程序中,我有我的主UIViewController ,一个子视图是透明的,但从屏幕底部滑入,然后滑动子视图的所有工作UIScrollViews 4个子视图。 我有分页启用,它工作得很好,但我想为他们每个添加一个UIPageControl。 我认真的抓不住代表,如何实施使用迅捷。 任何帮助将非常感激!

另外,我正在以编程的方式完成这个任务,所以请不要使用IB。 如果能提供帮助,很乐意提供代码。 谢谢

我想你和/或其他人正在寻找如何做到这一点将find这个答案有帮助。 代码示例使我能够在我的滚动视图上创build一个页面控件指示器,这是第一次尝试这样做。 我发现它非常清楚。

您可能需要添加到项目中的行是:

1:当你首先命名你的视图控制器类时,添加UIScrollViewDelegate作为协议。

2:在类声明中创build一个pageControlvariables。 你将需要玩帧号码,让它出现在你想要的地方。 目前的数字为我做了一个在窗口中间。 参考数字的意思是(指标左上angular的x位置,左上angular的y坐标,页面指标的宽度,页面指标的高度)

var pageControl : UIPageControl = UIPageControl(frame: CGRectMake(50, 300, 200, 20))

  1. 在viewDidLoad中添加这些行:

    configurePageControl()

    scrollView.delegate = self

  2. 你需要在viewDidLoad之后添加两个方法。 一个在viewDidLoad中被调用

     func configurePageControl() { self.pageControl.numberOfPages = <some reference to the number of pages> self.pageControl.currentPage = 0 self.pageControl.tintColor = UIColor.redColor() self.pageControl.pageIndicatorTintColor = UIColor.blackColor() self.pageControl.currentPageIndicatorTintColor = UIColor.greenColor() self.view.addSubview(pageControl) } 

      func scrollViewDidEndDecelerating(scrollView: UIScrollView) { let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width) pageControl.currentPage = Int(pageNumber) } 

scrollView委托实际上是非常简单的设置。 将UIScollViewDelegate添加为您的ViewController类将在类声明后添加的协议: class YourClassName: UIScrollViewDelegate 。 然后在viewDidLoad()中,通过将scrollView.delegate = self指定给类的滚动视图的委托属性来完成委托设置。 (再次看到我链接的例子,如果你需要进一步澄清这些命令的去向)

只需像这样在代码中设置它:

 private var pageControl = UIPageControl(frame: .zero) private func setupPageControl() { pageControl.numberOfPages = controllers.count pageControl.translatesAutoresizingMaskIntoConstraints = false pageControl.currentPageIndicatorTintColor = UIColor.orange pageControl.pageIndicatorTintColor = UIColor.lightGray.withAlphaComponent(0.8) let leading = NSLayoutConstraint(item: pageControl, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0) let trailing = NSLayoutConstraint(item: pageControl, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0) let bottom = NSLayoutConstraint(item: pageControl, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0) view.insertSubview(pageControl, at: 0) view.bringSubview(toFront: pageControl) view.addConstraints([leading, trailing, bottom]) } 

代表只是一个class级的方法,可以被派往另一个class级。 这些方法通常是callback。

例如,当用户点击返回时,TextField的callback函数可以在Delegate中实现。 委托可以在ViewController类中实现。

现在,当用户点击返回时,TextField对象将调用ViewController对象中的委托方法。 关于这一点的好处是,可以从委托方法访问ViewController对象的所有variables和方法。 否则,您将需要TextField对象本身内的ViewController对象的句柄。

代表被实现为协议,这只是接口。 因此,如果ViewController实现了TextFieldDelegate协议,则可以从ViewController对象内调用所有的textfieldcallback。

我希望这有帮助。