Обнаружение касания UIButton, добавленного как SubView в UIScrollView - PullRequest
0 голосов
/ 15 июля 2011

У меня есть вид прокрутки со многими кнопками.Я хочу обнаружить прикосновения к UIButton внутри scrollView, но не смог их получить.Я попытался создать подкласс uiscrollview и uibutton, но потерпел неудачу.Я хочу обнаружить прикосновения к кнопке, если пользователь удерживает эту кнопку в течение короткого времени, например, 2 секунды.А затем я хочу перетащить кнопку, чтобы место, где пользователь может перетащить ее в представлении прокрутки.Пожалуйста, помогите мне.

Ответы [ 2 ]

4 голосов
/ 15 июля 2011

Вам не нужно создавать подклассы.

Попробуйте присоединиться к вашему UIButton a UILongPressGestureRecognizer.

Посмотрите здесь для получения дополнительной информации.

Распознаватели жестов доступны в iOS 3.2 и упрощают все, что связано с жестами. Здесь вы можете найти учебник.

Если вы хотите поддерживать предыдущие версии, вам придется прибегнуть к другому методу:

  1. add UIControlEventTouchUpInside и UIControlEventTouchDown действия для вашей кнопки;

  2. в обработчике touchDown начинают отсчет времени (задайте переменную с текущим временем);

  3. в TouchUp обработчик прекращает отсчет времени;измерьте разницу и, если она выше вашего порога, запустите действие.

Если это не сработает, предоставьте дополнительную информацию о том, почему это не сработает, пожалуйста.

1 голос
/ 15 июля 2011

Вы можете установить tag для каждой кнопки на scrollView, затем, как сказал @sergio, добавить UILongPressGestureRecognizer (или uicontrolevent) к каждой кнопке, чтобы при настройке страниц в просмотре прокрутки вы могли добавить:

[button addTarget:self action:@selector(someAction:)  forControlEvents:UIControlEventTouchUpInside];

или

UILongPressGestureRecognizer *twoSecPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(someAction:)];
            [twoSecPress setMinimumPressDuration:2];
            [button addGestureRecognizer:twoSecPress];
            [twoSecPress release];

и в вашем действии ..

    -(IBAction)someAction:(id)sender{
      UIButton *button=(UIButton*)sender;
          if(button.tag==YOUR_TAG){
            //do something
    }
}

или

-(void)someAction:(UILongPressGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateBegan) {
            if ([recognizer.view isKindOfClass:[UIButton class]]) {
                UIButton *tmpButt=(UIButton *)recognizer.view;
                NSLog(@"%d", tmpButt.tag);
    }
}

(очевидно, добавьте UIGestureRecognizerDelegate в ваш .h)

...