2015-10-23 2 views
0

У меня есть сегментированный элемент управления с 5 сегментами. Мне нужно, чтобы какое-то событие было запущено, когда на любом сегменте происходит касание, и я имею в виду нажатие и удержание, без поднятия пальца. И когда пользователь поднимает палец, он должен сброситьЕсть ли способ зарегистрировать прикосновение к UISegmentedControl

Я попытался с помощью touchesBegan и touchesEnded, но я не получить текущую SelectedIndex в touchesBegan, вот мой код

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    long oldValue = self.selectedSegmentIndex; 
    [super touchesBegan:touches withEvent:event]; 
    if (oldValue == self.selectedSegmentIndex) 
     [self sendActionsForControlEvents:UIControlEventValueChanged]; 
} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"touchesEnded"); 
    NSLog(@"selectedIndex%lu",self.selectedSegmentIndex); 
    [super touchesEnded:touches withEvent:event]; 
    self.selectedSegmentIndex = -1; 
} 

Есть ли способ добиться эффекта «прикосновения» для сегментированного управления или любой другой альтернативы?

+0

В touchsBegan сегмент еще не выбран, поэтому вы не можете его получить. – kientux

+0

@kientux Есть ли способ получить выбранный индекс раньше? Я хочу, чтобы событие было запущено, когда его касание – vin

+0

. Я думаю, что только с UISegmentedControl, ничего не может сделать с событием touch down, потому что сегмент выбирается только при касании. Если вы действительно хотите это сделать, вы можете поместить прозрачную кнопку на каждый сегмент, а когда кнопка была затронута, вызовите 'setSelectedSegmentIndex:'. Затем у вас есть как событие касания, так и выбранный индекс. – kientux

ответ

0

Вы можете использовать touchDown: селектор IBAction.

+0

Это не работает, я уже пробовал, UISegmentedControl работает только с селектором valueChanged – vin

+0

Проверьте эту тему - http://stackoverflow.com/questions/1620972/uisegmentedcontrol-register-taps-on-selected-segment – nanjunda

0

Вы можете попробовать переопределить:

- (void) setSelectedSegmentIndex:(NSInteger)toValue 
0

Откровенно говоря, я не думаю, что это можно сделать с UISegmentedControl. Вы не получаете выбранный сегментный индекс до тех пор, пока не вызывается touchesEnded:withEvent:.

Если вы хотите попасть в touchesBegan:withEvent:, то я бы посоветовал написать свое собственное представление, которое выглядит как UISegmentedControl, и дает вам возможность позвонить по телефону touchesBegan:withEvent:.

Как было предложено kientux выше, добавление прозрачных представлений или кнопок в верхней части каждого сегмента в UISegmentedControl может стать еще одним потенциальным решением вашей проблемы, но было бы очень сложно!

Удачи вам!

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