我有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)
}
}
}
答案 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
}