Как программно установить выбранное состояние для сегмента в UISegmentedControl

У меня в UISegmentedControl четыре сегмента. Я пытаюсь программно установить выбранное состояние третьего и четвертого сегментов одновременно, если пользователь выбрал первый сегмент.

Пример: в данном сегментированном элементе управления, если пользователь выбрал сегмент A, следует выбрать C, D.

Я изучил методы Apple, но не нашел ни одного, соответствующего моим требованиям. Я ищу метод, который выглядел бы так:

Любая помощь по этому поводу очень ценится.


- (void) setSelected: (BOOL) выбран дляSegmentAtIndex: (NSUInteger) сегмент

Параметры

включен

ДА, чтобы выбрать указанный сегмент, или НЕТ, чтобы отменить выбор сегмента. По умолчанию сегменты не выделены.

сегмент

Номер индекса, идентифицирующий сегмент в элементе управления. Это должно быть число от 0 до количества сегментов (numberOfSegments) минус 1; значения, превышающие этот верхний диапазон, закрепляются за ним.



person Revanth    schedule 03.05.2014    source источник


Ответы (7)


Swift 4.0

segmentedControl.selectedSegmentIndex = index
person Abhishek Jain    schedule 19.08.2017

Используйте setSelectedSegmentIndex так -

[mySegmentControl setSelectedSegmentIndex:index]
person indyfromoz    schedule 03.05.2014
comment
привет Сначала я попробовал это, но сообщение setSelectedSegmentIndex: выбирает только один сегмент за раз. Я хотел бы сразу выбрать c, d, если пользователь выберет сегмент a. - person Revanth; 04.05.2014
comment
@Revanth - выбранный вами элемент управления не соответствует вашим требованиям. Как было предложено, вам следует подумать о создании собственного элемента управления в соответствии с вашими требованиями. - person indyfromoz; 04.05.2014

Этот код предназначен для Swift 2.0

// Declare outlet for our segmented control
@IBOutlet weak var segmentcontroll: UISegmentedControl!

// Declare our IBAction for the segmented control
@IBAction func segmentneeded(sender: AnyObject) {

    // Here we test for the presently selected segment
    switch segmentcontroll.selectedSegmentIndex {
    case 0:
        self.view.backgroundColor=UIColor.purpleColor()
        segmentcontroll.selectedSegmentIndex=UISegmentedControlNoSegment
    case 1:
        self.view.backgroundColor=UIColor.yellowColor()
        segmentcontroll.selectedSegmentIndex=UISegmentedControlNoSegment
    default:
        self.view.backgroundColor=UIColor.grayColor()
        segmentcontroll.selectedSegmentIndex=UISegmentedControlNoSegment
    }
}
person Kishore Kumar    schedule 21.03.2016

UISegmentedControl работает как набор переключателей. То есть одновременно можно выбрать только один сегмент. Чтобы получить желаемую функциональность, вам нужно будет создать настраиваемый элемент управления, который выглядит как UISegmentedControl.

person user3386109    schedule 03.05.2014
comment
Спасибо. Я могу сгруппировать несколько кнопок вместе, чтобы они выглядели как UISegmenetedControl, и добавить настраиваемые функции, которые я ищу. - person Revanth; 04.05.2014

Сначала создайте выход из сегментированного элемента управления, который вы добавили из пользовательского интерфейса.

@IBOutlet weak var segmentedControl: UISegmentedControl!

Используя приведенный ниже код, программно измените выбранный сегмент.

segmentedControl.selectedSegmentIndex = 1 // index
person Harrish Selvarajah    schedule 11.03.2021

Вы можете просто использовать свойство selectedSegmentIndex, так как есть документация

https://developer.apple.com/library/ios/documentation/uikit/reference/UISegmentedControl_Class/Reference/UISegmentedControl.html#//apple_ref/occ/instp/UISegmentedControl/selectedSegmentIndex

Так просто:

[segmentControl setSelectedSegmentIndex:2];

Учтите, что вы можете установить только 1 индекс, а если вы хотите отменить выбор всех, вы должны установить индекс -1.

person Matteo Gobbi    schedule 03.05.2014

Программно это невозможно сделать в SegmentControl, но вы можете сделать это следующим образом: вы можете создать один imageView, поместите четыре кнопки на тот, размер которого равен сегментам, и сделайте их прозрачными при нажатии одной кнопки, измените изображение imageView, которое выглядит как сегмент C, D нажимаются таким образом, вы можете выполнить другую задачу.

person Banker Mittal    schedule 22.05.2014