Ведение выделения в UISegmentedControl

Могу ли я поддерживать выбранное состояние сегментов UISegmentViewControl?? то есть может ли сегмент оставаться выделенным, даже если пользователь выбирает другой сегмент?? Я не вижу ничего, что делает это где-нибудь!!

3 ответа

Решение

Это невозможно из коробки. (См. Как включить несколько сегментов UISegmentedControl для выбора?.)

Вы можете попробовать что-то вроде этого кода, чтобы обеспечить аналогичную функциональность.

Другим решением может быть использование категории:

#import <UIKit/UISegmentedControl.h>
@interface UISegmentedControl (MultiSelect) 
@end

Делая это, вы в принципе имеете доступ к закрытым переменным-членам UISegmentedControl . В частности, у вас есть доступ к массиву, содержащему сегменты кнопок, которыми вы можете манипулировать в соответствии со своими потребностями путем переопределения setSelectedSegmentIndex:selectedSegmentIndex: . Однако по разным причинам атрибуты, объявленные как закрытые, по-прежнему не должны вызываться напрямую, см. Это ссылка Как также предлагается там, вы можете скорее злоупотреблять KVC. Таким образом, реализация может выглядеть следующим образом:

@implementation UISegmentedControl (MultiSelect)
- (void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex {
    NSMutableArray *pArraySegments = [self valueForKey:@"segments"]; 
    if ((pArraySegments) && (selectedSegmentIndex >= 0) && (selectedSegmentIndex < [pArraySegments count])) {
        UIButton *pSegment = (UIButton*)[pArraySegments objectAtIndex:selectedSegmentIndex];
        pSegment.selected ? (pSegment.selected = NO) : (pSegment.selected = YES);
    }
}
@end

Это работает для меня. Однако, поскольку я сейчас читаю это обсуждение, я не совсем уверен, действительно ли это правильный подход.

Я нашел способ обойти это. Я поместил темное цветное изображение за каждым сегментом и установил для их скрытого свойства значение true. Затем я уменьшил значение альфа-канала uisegmented control. Затем в коде при нажатии на сегмент я включаю или выключаю видимость соответственно, несколько сегментов отображаются выбранными

Другие вопросы по тегам