Как обнаружить прокрутку UITableView? - PullRequest
15 голосов
/ 09 февраля 2010

Вопрос похож на этот, но ответ очень общий, расплывчатый. ( Обнаружение прокрутки UITableView ) Пожалуйста, не отклоняйте. Я ищу конкретный раствор.

У меня есть UITableView, в котором есть редактируемое текстовое поле, и PickerView появляется при выборе другой ячейки. Что мне нужно, это скрыть firstResponder или PickerView, когда пользователь начинает прокручивать эту UITableView.

Пока что вопрос Обнаружение прокрутки UITableView есть предположение, что вы должны создать подкласс UITableView. Если вы подкласс UITableView все еще внутренний / частный UIScrollView не доступен. Как получить доступ к родительскому ScrollView UITableView (без нарушения закона)?

Спасибо.

Ответы [ 4 ]

36 голосов
/ 09 февраля 2010

Вам не нужно создавать подкласс UITableView для отслеживания прокрутки. Ваш UITableViewDelegate может также служить UIScrollViewDelegate. Таким образом, в вашем делегате классе вы можете реализовать -scrollViewWillBeginDragging: или любой метод UIScrollViewDelegate, который вам нужен в вашей ситуации. (как на самом деле предложено в упомянутом вами вопросе)

8 голосов
/ 30 июня 2011

Чтобы расширить ответ Владимира, вот как я реализовал это решение:

В файле .h:

@interface MyViewController : UIViewController <UIScrollViewDelegate> 

В .m файле:

- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView {
    //logic here
}
6 голосов
/ 25 февраля 2015
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    if (scrollView == myTableView){
       // Your code here.....
    }
}
1 голос
/ 12 февраля 2015

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


1,1. Отключите прокрутку, если пользователь нажал кнопку обновления

1.2. Включить прокрутку после завершения процесса обновления


2,1. Отключите кнопку обновления, если пользователь прокручивает

2.2. Включите кнопку обновления, когда пользователь закончит прокрутку


Для реализации первой части (1.1. И 1.2.):

-(void)startReloading:(id)sender
{
    ...
    self.tableView.userInteractionEnabled = NO;
    // and the rest of the method implementation
}

-(void)stopReloading:(id)sender
{
    self.tableView.userInteractionEnabled = YES;
    // and the rest of the method implementation
}

Для реализации второй части (2.1. И 2.2.):

- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView
{
    barButton.enabled = NO;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    barButton.enabled = YES;
}

И, как объяснялось в предыдущем ответе, UISCrollViewDelegate необходимо установить в файле .h:

@interface MyTableViewController : UITableViewController <UIScrollViewDelegate> 

P.S. Вы можете использовать scrollEnabled вместо userInteractionEnabled, но все зависит от того, что вы делаете, но предпочтительным вариантом является userInteraction.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...