UISegmentedControl регистрируют касания на выбранном сегменте

Я имею сегментированный контроль, где пользователь может выбрать, как заказать список. Хорошо работает.

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

Существует ли решение для этого? И если так, что это?

Заранее спасибо!

61
задан 25 October 2009 в 16:51

1 ответ

Походит на забавный вопрос ответить. Эта схема подробно останавливается на E Steve и решения yershuachu. Эта версия использует UITapGestureRecognizer для получения всех касаний и который устанавливает selectedSegmentIndex на-1; но это также передает все касания UISegmentedControl, таким образом, это может обработать любые нормальные касания. Никакое разделение на подклассы не требуется.

UISegmentedControl *mySegControl;

- (void)viewDidLoad
{
    [super viewDidLoad];

    [mySegControl addTarget:self action:@selector(segmentAction:)
           forControlEvents:UIControlEventValueChanged];
    // allow the a seg button tap to be seen even if already selected
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]
                                          initWithTarget:self action:@selector(unitsSegTap:)];
    tapGesture.cancelsTouchesInView = NO; // pass touches through for normal taps
    [mySegControl addGestureRecognizer:tapGesture];

    // continue setup ...
}

- (void)segTap:(UITapGestureRecognizer *)sender
{
    mySegControl.selectedSegmentIndex = -1;
}

// called for UIControlEventValueChanged
- (void)segmentAction:(UISegmentedControl *)sender
{
    NSInteger index = sender.selectedSegmentIndex;
    NSLog(@"unitsSegmentAction %d",(int)index);
    // process the segment
}
1
ответ дан 31 October 2019 в 15:15

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

Похожие вопросы: