Обнаружение вертикальной прокрутки по горизонтальной прокрутке UIScrollView с помощью кнопок - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть UIScrollView, который прокручивается по горизонтали.Я также поместил свой собственный обработчик, чтобы сделать что-то другое на вертикальной прокрутке.Это работает очень хорошо, но затем я добавил несколько кнопок в UIScrollView, используя следующий код:

UIButton *catButton = [UIButton buttonWithType:UIButtonTypeCustom];
[catButton addTarget:self action:@selector(clickCatButton:) forControlEvents: UIControlEventTouchUpInside];

действие кнопки вызывается при нажатии:

- (void) clickCatButton:(id) sender 
{
   [NSObject cancelPreviousPerformRequestsWithTarget:self];
}

, но моя проблема в том, чтопосле помещения кнопок в UIScrollView они берут код, управляющий вертикальной прокруткой.

Я немного застрял в том, что лучший способ исправить это.

Спасибо за вашу помощь

1 Ответ

1 голос
/ 12 февраля 2011

Если вы действительно хотите обрабатывать вертикальную прокрутку, даже если перетаскивание происходит на кнопках, вы можете создать подкласс UIButton и переслать события касания следующему респонденту (который в данном случае является представлением прокрутки).В своем подклассе UIButton переопределите методы обработки событий (touchesBegan ... и т. Д.), Чтобы вызвать реализацию суперкласса (UIButton's), затем перенаправьте события следующему респонденту, например:

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

Нотщательно продумайте все случаи, которые могут произойти, когда обработка события кнопки и обработка вертикальной прокрутки идут вместе.Например, если перетаскивание происходит по кнопке (ну, хотя этого не произойдет, если вертикальная прокрутка будет работать должным образом), тогда кнопка считает, что это действительное «нажатие» на кнопку, и она выдаст сообщение о действии.

...