Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remembering scroll position on UITableView

I have a bit of a problem with my iOS app in xcode. I have a UITableView that loads a few hundred cells. When I scroll down to a specific cell and drill down to detailedviewcontrollers and return again the master view table has returned all the way to the top. I've had a look at the following 2 questions that are similar.

How can I get the UITableView scroll position so I can save it?

Setting scroll position in UITableView

I still can't get these to work. I'm not the most experienced coder so I'm really struggling with this.

I know things like viewWillDisappear and viewDidAppear need to be changed, but I just really can't get much further than that.

On this table I have a reloadData feature so it is possible to pull down the latest data from the server and also a working search bar.

Anyway, a helping hand would be great. Thanks,

Luke

like image 636
mylogon Avatar asked Sep 17 '13 07:09

mylogon


People also ask

How do I get scroll position?

To get or set the scroll position of an element, you follow these steps: First, select the element using the selecting methods such as querySelector() . Second, access the scroll position of the element via the scrollLeft and scrollTop properties.

Is UITableView scrollable?

Scrolling to a certain point in a table view is a common requirement. For example, you might scroll to show new entries after loading new data or to show that a row has updated data. Since UITableView inherits from UIScrollView it's easy to scroll programmatically.


2 Answers

See here you have to first save the scrolled position of tableView i.e. contentOffset of tableView and then reuse it when you are coming back to tableView.

1)When and where you will save it :

When : At the point, when you are drilling down to detailViewController save the contentOffset of tableView

How : float verticalContentOffset = tableView.contentOffset.y;

2) How will you set tableView back to the same scrolled position :

[tableView setContentOffset:CGPointMake(0, verticalContentOffset)];

Hope this will help you.

like image 156
Prashant Nikam Avatar answered Oct 17 '22 22:10

Prashant Nikam


Sorted!

With a bit of inspiration from Desdenova, whilst at work I had a good think about it and realised what it could be. Remembering that I had a search bar, I had implemented the following code a few months ago to hide it:

[self.tableView setContentOffset:CGPointMake(0,-20) animated:NO];

In naivety I put that in viewDidAppear rather than viewDidLoad. Obviously, this did hide the search bar, but with it being in the wrong void command it did it every time the masterDetailView returned to the top of the stack. So, after moving the above code to viewDidLoad it now still hides it, but only the once.

I'm just spelling it out like this for other beginners, like myself, who may come across the same problem and may just save their sanity!

Thanks to you all for your ideas that helped me out.

+1 to you all!

like image 13
mylogon Avatar answered Oct 17 '22 22:10

mylogon