How do I switch UIsegmentedControl programmatically?

后端 未结 6 1497
孤独总比滥情好
孤独总比滥情好 2021-02-01 11:47

How do I switch UISegmentedControl programmatically ?

相关标签:
6条回答
  • 2021-02-01 12:13

    The selectedSegmentIndex property identifies the selected segment of a UISegmentedControl. Set this property to the any valid segment index, or UISegmentedControlNoSegment (-1) to turn off the current selection.

    // select the first segment
    segmented.selectedSegmentIndex = 0;
    
    // turn off the current selection
    segmented.selectedSegmentIndex = UISegmentedControlNoSegment;
    
    0 讨论(0)
  • 2021-02-01 12:15

    In Swift:

    segmentedControl.selectedSegmentIndex = 1
    

    Swift 2:

    segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged)
    

    Swift 3:

    segmentedControl.sendActions(for: UIControlEvents.valueChanged)
    
    0 讨论(0)
  • 2021-02-01 12:16

    Alternatively, after you have changed the selectedSegmentIndex call 'sendActionsForControlEvents:' for example

    segmentedControl.selectedSegmentIndex = 0
    
    [segmentedControl sendActionsForControlEvents:UIControlEventValueChanged];
    
    0 讨论(0)
  • 2021-02-01 12:18

    EDIT: as Yogesh Nikam Patil made me notice, UIControlEvents has been renamed from UIControlEvents to UIControl.Event. I've updated my code accordingly.

    @arcady bob answer was the one that did the trick for me.

    I just post an updated version for SWIFT 5:

    yourSegmentedControl.selectedSegmentIndex = 0
    yourSegmentedControl.sendActions(for: UIControl.Event.valueChanged)
    

    If you use just the first line, the segmented will react accordingly graphically, but your IBAction associated with the segmented control won't be called. In a few words: the second line is like tapping on the segmented control. This is what I needed and what I was missing.

    0 讨论(0)
  • 2021-02-01 12:24

    @jmstone response, true, this action will not invoke the valueChanged event for this control.

    One way to overcome this is to just call the function yourself:

    segmentedControl.selectedSegmentIndex = 3;
    [self valueChangedMethod:segmentedControl];
    

    This will call:

    - (void)valueChangedMethod:(UISegmentedControl *)segmentedControl
    {
        //continue your code here...
    }
    
    0 讨论(0)
  • 2021-02-01 12:27

    I've had a similar problem where the segmented control wasn't changing. I was calling "selectedSegmentIndex", etc too early. Once I called it after "viewDidLoad" was called then everything was fine again.

    0 讨论(0)
提交回复
热议问题