Как програмно да зададете избраното състояние за сегмент в 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, което изглежда като Segment C, D се натискат по този начин можете да направите друга задача.

person Banker Mittal    schedule 22.05.2014