我有一个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
来跟踪用户互动。
答案 0 :(得分:1)
如果我设置
isMomentary = true
无论选择哪个段,都将使用值-1调用didSet。
如果您设置isMomentary = true
,则分段控件将更像是按钮的水平堆栈视图,并且在任何轻按时都会触发带有正确索引的valueChanged
回调,但立即将其设置为{ {1}},即noSegment
。
使用-1
时,如果您点击一个按钮,它将突出显示,然后返回其正常状态。它没有选定的状态。通常,这不是您想要的。这只是对按钮的水平stackview的便利。我会说这有点反常。