Andrew Andrew - 8 months ago 81
iOS Question

How to get notified when scrollToRowAtIndexPath finishes animating

This is a follow-up to How to get notified when a tableViewController finishes animating the push onto a nav stack.

In a

I want to deselect a row with animation, but only after the tableView has finished animating the scroll to the selected row. How can I be notified when that happens, or what method gets called the moment that finishes.

This is the order of things:

  1. Push view controller

  2. In
    I select a certain row.

  3. In
    (to the selected row).

  4. Then when that finishes scrolling I want to
    deselectRowAtIndexPath: animated:YES

This way, the user will know why they were scrolled there, but then I can fade away the selection.

Step 4 is the part I haven't figured out yet. If I call it in
then by the time the tableView scrolls there, the row has been deselected already which is no good.


You can use the table view delegate's scrollViewDidEndScrollingAnimation: method. This is because a UITableView is a subclass of UIScrollView and UITableViewDelegate conforms to UIScrollViewDelegate. In other words, a table view is a scroll view, and a table view delegate is also a scroll view delegate.

So, create a scrollViewDidEndScrollingAnimation: method in your table view delegate and deselect the cell in that method. See the reference documentation for UIScrollViewDelegate for information on the scrollViewDidEndScrollingAnimation: method.