覆盖selectedSegmentIndex

时间:2016-12-14 01:14:47

标签: ios swift uisegmentedcontrol setter

我有一个UISegmentedControl的子类,想要捕捉选择段的事件。

我覆盖了selectedSegmentIndex并使用了didSet但未调用它并且在未调用didSet的情况下更改了值。

class SLSegmentControl: UISegmentedControl {
    override var selectedSegmentIndex: Int {
        didSet {
            print(selectedSegmentIndex)
        }
    }

如果我设置

isMomentary = true

使用值didSet调用-1,无论选择哪个细分。

目前,我正在使用addTarget来捕获此事件。但是,一旦在此类之外将Target添加到此类,这将被禁用,因此我想避免使用它。

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

只要我记得它在objective-c中有效,但在swift 3无效。我错过了什么吗?

我可以通过将观察者添加到selectedSegmentIndex来跟踪用户互动。

1 个答案:

答案 0 :(得分:1)

如果我设置

isMomentary = true

无论选择哪个段,都将使用值-1调用didSet。

如果您设置isMomentary = true,则分段控件将更像是按钮的水平堆栈视图,并且在任何轻按时都会触发带有正确索引的valueChanged回调,但立即将其设置为{ {1}},即noSegment

使用-1时,如果您点击一个按钮,它将突出显示,然后返回其正常状态。它没有选定的状态。通常,这不是您想要的。这只是对按钮的水平stackview的便利。我会说这有点反常。