Как переключить uisegmentedcontroll программно?

Как переключить UISegmentedControll программно ?

5 ответов


на selectedSegmentIndex свойство определяет выбранный сегмент UISegmentedControl. Задайте для этого свойства любой допустимый индекс сегмента или UISegmentedControlNoSegment (-1) для отключения текущего выделения.

// select the first segment
segmented.selectedSegmentIndex = 0;

// turn off the current selection
segmented.selectedSegmentIndex = UISegmentedControlNoSegment;

кроме того, после изменения selectedSegmentIndex вызов "sendActionsForControlEvents:" например

segmentedControl.selectedSegmentIndex = 0

[segmentedControl sendActionsForControlEvents:UIControlEventValueChanged];

@jmstone ответ, true, это действие не вызовет событие valueChanged для этого элемента управления.

один из способов преодолеть это, чтобы просто вызвать функцию себе:

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

в:

- (void)valueChangedMethod:(UISegmentedControl *)segmentedControl
{
    //continue your code here...
}

В Swift:

segmentedControl.selectedSegmentIndex = 1

Swift 2:

segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged)

Swift 3:

segmentedControl.sendActions(for: UIControlEvents.valueChanged)

У меня была аналогичная проблема, когда сегментированный элемент управления не менялся. Я называл "selectedSegmentIndex" и т. д. слишком рано. Как только я назвал его после того, как был вызван "viewDidLoad", все снова было хорошо.