【发布时间】:2017-08-02 06:02:23
【问题描述】:
我有一个 UISegmentedControl,上面有一个 segmentedValueChanged 方法。 在调用此方法之前,我需要找出所选索引是什么。 如何做到这一点?
【问题讨论】:
-
将其存储在属性中,或子类 UISegmentedControl 并在选择段时覆盖该方法并在那里更新存储的值
我有一个 UISegmentedControl,上面有一个 segmentedValueChanged 方法。 在调用此方法之前,我需要找出所选索引是什么。 如何做到这一点?
【问题讨论】:
使用此功能:
@property (nonatomic, assign) NSInteger oldSegmentedIndex;
@property (nonatomic, assign) NSInteger actualSegmentedIndex;
.......
- (void)viewDidLoad
{
.......
self.oldSegmentedIndex = -1;
self.actualSegmentedIndex = self.segmentedControl.selectedSegmentIndex;
.......
}
.......
- (IBAction)didSegmentedValueChanged:(id)sender
{
//Do whatever you want
self.oldSegmentedIndex = self.actualSegmentedIndex;
self.actualSegmentedIndex = self.segmentedControl.selectedSegmentIndex;
}
【讨论】:
最好的方法是保留一个变量来保存最后选择的索引。然后你只需在需要时检查它的价值
【讨论】:
键值观察还有一个不错的解决方案。 Swift 3 的代码如下:
class SegmentedControl: UISegmentedControl {
private(set) var previousSelectedSegmentIndex: Int?
override func willChangeValue(forKey key: String) {
if key == #keyPath(selectedSegmentIndex) {
previousSelectedSegmentIndex = selectedSegmentIndex
}
super.willChangeValue(forKey: key)
}
}
【讨论】: