UISegmentedControl deselect (make none of the segments selected)

前端 未结 8 2075
我寻月下人不归
我寻月下人不归 2021-02-01 01:30

in fact the title contains my question. I have a UISegmentedControl, and need to deselect currently selected tab. I tried:

[menu setSelectedSegmentIndex:-1];


        
相关标签:
8条回答
  • 2021-02-01 01:56

    I did class which supports this kind of interaction:

    class UIDeselectableSegmentedControl: UISegmentedControl {
    
        override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
            let previousSelectedSegmentIndex = self.selectedSegmentIndex
    
            super.touchesEnded(touches, with: event)
    
            if previousSelectedSegmentIndex == self.selectedSegmentIndex {
    
                self.selectedSegmentIndex = UISegmentedControl.noSegment
                let touch = touches.first!
                let touchLocation = touch.location(in: self)
                if bounds.contains(touchLocation) {
                    self.sendActions(for: .valueChanged)
                }
            }
        }
    }
    

    The main advantage of that is that you just need to modify which class the Storyboard/Xib/ViewCode is using and this will work like a charm ;]

    0 讨论(0)
  • 2021-02-01 01:57

    I guess you try to create a momentary selection in segmented control. In interface builder set the segmentedcontrol to momentary. Or in code you can do:

    menu.momentary = YES;
    
    0 讨论(0)
提交回复
热议问题