views:

172

answers:

2

Actually, a UITableView is a UIScrollView (inherits from that). Now, I made a UITableView subclass and added this line of code to it:

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

For some reason this is never called when I scroll the table view. But since UITableView has a delegate property on it's own, I assume that it must implement UIScrollViewDelegate protocol and is the delegate for the scroll view itself. Isn't it?

How could I intercept scroll position changes? I want to read them only. Probably I couldn't set them with contentOffset, right?

A: 

Just implement setContentOffset: and call super after you read the values you want. A UITableView is a UIScrollView so you can scroll it by calling setContentOffset: as well.

drawnonward
+2  A: 

Probably I couldn't set them with contentOffset, right?

As UITableView inherits from UIScrollView you can get and set its contentOffset property.

Note also that UITableViewDelegate protocol is defined the following way:

@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>

That is it conforms to UIScrollViewDelegate protocol as well so your tableView's delegate(not UITableView itself) can implement any UIScrollViewDelegate methods and they should get called fine.

Vladimir