UISegmentedControl register taps on selected segment

后端 未结 20 3070
渐次进展
渐次进展 2020-12-04 15:28

I have a segmented control where the user can select how to order a list. Works fine.

However, I would like that when an already selected segment is tapped, the orde

20条回答
  •  生来不讨喜
    2020-12-04 15:59

    You can subclass UISegmentedControl, and then override setSelectedSegmentIndex:

    - (void) setSelectedSegmentIndex:(NSInteger)toValue {
        if (self.selectedSegmentIndex == toValue) {
            [super setSelectedSegmentIndex:UISegmentedControlNoSegment];
        } else {
            [super setSelectedSegmentIndex:toValue];        
        }
    }
    

    If using IB, make sure you set the class of your UISegmentedControl to your subclass.

    Now you can listen for the same UIControlEventValueChanged as you would normally, except if the user deselected the segment, you will see a selectedSegmentIndex equal to UISegmentedControlNoSegment:

    -(IBAction) valueChanged: (id) sender {
        UISegmentedControl *segmentedControl = (UISegmentedControl*) sender;
        switch ([segmentedControl selectedSegmentIndex]) {
            case 0:
                // do something
                break;
            case 1:
                // do something
                break;
            case UISegmentedControlNoSegment:
                // do something
                break;
            default:
                NSLog(@"No option for: %d", [segmentedControl selectedSegmentIndex]);
        }
    }
    

提交回复
热议问题