Другим решением может быть использование категории:
#import <UIKit/UISegmentedControl.h>
@interface UISegmentedControl (MultiSelect)
@end
Делая это, вы в принципе получаете доступ к закрытым переменным-членам UISegmentedControl. В частности, у вас есть доступ к массиву, содержащему сегменты кнопок, которыми вы можете манипулировать в соответствии со своими потребностями путем переопределения setSelectedSegmentIndex: selectedSegmentIndex:. Однако по разным причинам к атрибутам, объявленным как приватные, по-прежнему нельзя обращаться напрямую, смотрите 1004 * эта ссылка . Как также предлагается там, вы можете скорее злоупотреблять 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
Это работает для меня. Однако, поскольку я сейчас прочитал это обсуждение , я не совсем уверен, действительно ли это правильный подход.