ведение выбора в UISegmentedControl - PullRequest
3 голосов
/ 12 августа 2010

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

Ответы [ 3 ]

0 голосов
/ 03 сентября 2010

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

0 голосов
/ 02 июля 2011

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

#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

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

0 голосов
/ 12 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...