Как перехватить изменения UIScrollView contentOffset из подкласса UITableView?

Фактически, UITableView - это UIScrollView (наследуется от него). Теперь я создал подкласс UITableView и добавил к нему эту строку кода:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    NSLog(@"contentOffset: %@", NSStringFromCGPoint(self.contentOffset));
}

По какой-то причине это никогда не вызывается, когда я прокручиваю таблицу. Но поскольку UITableView имеет собственное свойство делегата, я предполагаю, что он должен реализовывать протокол UIScrollViewDelegate и является делегатом для самого представления прокрутки. Не так ли?

Как я мог перехватить изменение положения прокрутки? Я хочу только их прочитать. Наверное, я не мог установить их с помощью contentOffset, верно?


person dontWatchMyProfile    schedule 15.04.2010    source источник


Ответы (2)


Наверное, я не мог установить их с помощью contentOffset, верно?

Поскольку UITableView наследуется от UIScrollView, вы можете получить и установить его свойство contentOffset.

Также обратите внимание, что протокол UITableViewDelegate определяется следующим образом:

@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>

То есть он также соответствует протоколу UIScrollViewDelegate, поэтому делегат вашего tableView (а не сам UITableView) может реализовывать любые методы UIScrollViewDelegate, и они должны вызываться нормально.

person Vladimir    schedule 15.04.2010

Просто реализуйте setContentOffset: и вызовите super после того, как прочтете нужные значения. UITableView - это UIScrollView, поэтому вы можете прокручивать его, также вызывая setContentOffset :.

person drawnonward    schedule 15.04.2010