UISegmentedControl deselect (make none of the segments selected)

前端 未结 8 2101
我寻月下人不归
我寻月下人不归 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, 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 ;]

提交回复
热议问题