在Swift中无法观察UIPageControl的currentPage更改

时间:2019-05-24 11:44:40

标签: ios swift key-value-observing uipagecontrol

我有UIPageControl的子类,我想观察currentPage中的变化。

不幸的是,当从MyPageControl的水龙头更改currentPage时,我的currentPage的{​​{1}}没有被调用。

didSet

使用KVO也无法观察到这种变化:

class MyPageControl: UIPageControl {
    override var currentPage: Int {
        didSet {
            // not called when `currentPage` is changed from a tap
            updateSomething(for: currentPage)
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以使用sendAction(_:to:for:)检测到点击,然后读取currentPage的值。

class MyPageControl: UIPageControl {
    var observation: NSKeyValueObservation?
    override func awakeFromNib() {
        super.awakeFromNib()
        observation = observe(\.currentPage) { (_, _) in
            // not called when `currentPage` is changed from a tap
            updateSomething(for: self.currentPage)
        }
    }
}

答案 1 :(得分:1)

来自Apple Doc:Apple Doc

当用户点击页面控件以移至下一页或上一页时,该控件将发送valueChanged事件供委托处理。然后,委托可以评估currentPage属性以确定要显示的页面。页面控件只能向任一方向前进一页。当前查看的页面用白点表示。根据设备的不同,屏幕上会剪切一定数量的点。

代码:

pageControl.addTarget(self, action:#selector(pageControlTapHandler(sender:)), for: .touchUpInside)

//or

pageControl.addTarget(self, action:#selector(pageControlTapHandler(sender:)), for: .valueChanged)



...

func pageControlTapHandler(sender:UIPageControl) {
    print("currentPage:", sender.currentPage) //currentPage: 1
}