UISegmentedControl register taps on selected segment

后端 未结 20 3067
渐次进展
渐次进展 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:50

    I'm using KVO to invert already selected segment for iOS8.

    #import "QCSegmentedControl.h"
    
    static void *QCSegmentedControlContext = &QCSegmentedControlContext;
    
    @implementation QCSegmentedControl
    
    - (id)initWithCoder:(NSCoder *)aDecoder {
        self = [super initWithCoder:aDecoder];
        if (self) {
            [self registerKVO];
        }
    
        return self;
    }
    
    - (void)dealloc {
        [self removeObserver:self forKeyPath:@"selectedSegmentIndex"];
    }
    
    #pragma mark -
    
    - (void)registerKVO {
        [self addObserver:self
               forKeyPath:@"selectedSegmentIndex"
                  options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
                  context:QCSegmentedControlContext];
    }
    
    - (void)observeValueForKeyPath:(NSString *)keyPath
                          ofObject:(id)object
                            change:(NSDictionary *)change
                           context:(void *)context {
        if (context == QCSegmentedControlContext) {
            NSNumber *new = change[NSKeyValueChangeNewKey];
            NSNumber *old = change[NSKeyValueChangeOldKey];
            if (new.integerValue == old.integerValue) {
                self.selectedSegmentIndex = UISegmentedControlNoSegment;
            }
        }
    }
    
    @end
    

提交回复
热议问题