7

I have a UISegmentedControl with a segmentedValueChanged method on it. I need to find out what was the selected index before this method is called . How to do this?

user1028028
  • 6,323
  • 9
  • 34
  • 59
  • Store it in a property, or subclass UISegmentedControl and override the method when a segment is selected and update a stored value there – Tim Oct 30 '13 at 10:33

3 Answers3

11

Use this function:

@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;
}
Alex
  • 1,061
  • 10
  • 14
3

The best way is to keep a variable that holds the last selected index. Then you just check it's value when you need

Zalykr
  • 1,524
  • 1
  • 10
  • 20
2

There is also a nice solution with key-value observing. Here the code for 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)
    }

}
tanaschita
  • 221
  • 4
  • 11