2013-11-12 3 views
9

Есть ли способ обнаружить второй клик по сегменту в UISegmentedControl? Я нашел:UISegmentedControl: как определить щелчок по текущему сегменту?

Detect second click on a segment

однако, говорится, что:

Если вы установили сегментированный контроль, чтобы иметь мгновенный стиль, сегмент не проявляет себя как выбран (синий фон) когда пользователь прикасается к нему. Кнопка раскрытия всегда кратковременна и не влияет на фактический выбор.

Есть ли способ, чтобы обнаружить второй щелчок , а также триггера действие выбора и показать сегмент, как выбрано?

Если нет прямого способа сделать это, то, что я думал, заключается в том, что у меня есть флаг , установленный на YES, после чего каждый щелчок вручную обновляет состояние выбора, но затем мне также необходимо обновить/отменить выбор других сегментов.

Благодаря

ответ

15

Решение состоит в том, чтобы иметь собственный подкласс UISegmentedControl и проверить это сами, как это.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    current = self.selectedSegmentIndex; 
    [super touchesBegan:touches withEvent:event]; 
} 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesEnded:touches withEvent:event]; 

    if (current == self.selectedSegmentIndex) 
     [self sendActionsForControlEvents:UIControlEventValueChanged]; 
} 

Я имел другое решение все в touchesBegan, но он больше не работает в прошивкой 7. Существует также другое решение на переполнение стека, которые не работают в IOS 6 и выше.

+0

Я попробую это, спасибо! – hzxu

+1

Большинство решений, которые я пробовал до сих пор, будут запускать событие выбора два раза, это отлично работает на iOS 7. Вы лучшие, спасибо! –

0

Чтобы сделать конкретный сегмент нажатием кнопки снова невозможно, но вы можете сбросить весь сегмент управления с помощью UISegmentedControlNoSegment.

[self.segmentCtrlOutlet setSelectedSegmentIndex:UISegmentedControlNoSegment]; 

то, что вам нужно сделать, это поставить выше код в том месте, где этот код выполняется при нажатии на определенный сегмент UISegmentedControl.

например. В моем проекте, когда я нажимаю на сегмент, открывается UIPopoverController, внутри которого у меня есть UIPicker, поэтому я использую вышеуказанный код в методе делегата UIPicker «didSelectRow»

+0

Разве это не то же самое, что сделать контроль кратковременным? Я не думаю, что это решает вопрос, так как OP хочет обнаружить щелчок по сегменту, который уже выбран. https://developer.apple.com/documentation/uikit/uisegmentedcontrol/1618586-ismomentary –

Смежные вопросы