views:

23

answers:

2

I have a ViewController whose view results from data from a fetch request with Predicate 1. I'd like to repeat the fetch request with a more restrictive Predicate 2 that will give a SUBSET of the data using Predicate 1.

Then I'd like to update (and possibly animate) that view on the iPhone screen by pressing a toggle button, so that the old and new views expand and collapse the rows. (I don't want to do this modally, as I'd like the user to see which rows came from the old rows.)

I'm thinking of something like the Phone application on the iPhone. Under the "Recents" tab, you'll see "All" and "Missed" buttons. When you press these buttons, it switches between showing all calls and just the missed ones by expanding/collapsing the rows. As far as I can tell, this is not a modal transition.

Can someone give me pointers as to how to do this?

A: 

If your view is a UITableView, you can use a combination of

-deleteRowsAtIndexPaths:withRowAnimation:

and

-deleteSections:withRowAnimation:

as well as the corresponding -insert methods, if applicable. You can batch multiple changes (so they animate at the same time) with -beginUpdates and -endUpdates.

I'm not aware of any way you'll be able to do this that doesn't involve iterating over one of the two sets and repeatedly calling -indexForObject on the other, though.

Seamus Campbell
Thanks... insertions and deletions (and keeping track of which ones belong and where they are on the lists) seems like a lot of work when I'm just going back and forth between the same two lists of rows. Wish there was an easier way...
frandogger
A: 

I found a way to expand/collapse rows by changing the heights of each cell, using tableView:heightForRowsAtIndexPath:indexPath:, as in: http://www.alexandre-gomes.com/?p=482

Hope that's helpful to someone!

frandogger