douglasd3
douglasd3

Reputation: 761

Make cells appear and disappear in TableView

I making an app with a table view and a data source (core data). In this table i group several tasks ordered by date, and i have this segmented control. I want the table to only load the tasks later or equal than today's date, when the user taps the second segment i want to show all tasks, if he taps the first segment the table must only show the later dates tasks again.

The problem is:

1 - I'm using fetchedResultsController associate with a indexPath to get the managed object.

2 - I use the insertRowsAtIndexPaths:withRowAnimation: and deleteRowsAtIndexPaths:withRowAnimation: methods to make the cells appear and disappear. And this mess with my indexPaths, if i want to go to the detail view of an specific row it is associate with a different indexPath, after delete the rows.

This problem was fixed by a method i did, but i still have other problems of indexPaths and cells, and it seems to me that is gone be me messy to each problem a fix.

There is a simple way to do that?

I tried just to hide the cells instead of delete, it works just fine, but in the place of the hidden cells was a blank space, if there is a way to hide these cells and make the non-hidden cells occupy the blank space i think that will be the simplest way.

Anyone can help me?

Upvotes: 0

Views: 1762

Answers (2)

lu yuan
lu yuan

Reputation: 7227

set the height of the cell to 0 when it hides, and set the height back to the original value when it appears.

TableViewController.h

@interface TableViewController{
CGFloat cellHeight;
}

TableViewController.m

- (void)cellHeightChange{
//if you need hide the cell then
cellHeight = 0;
cellNeedHide.hidden = YES;
//if you need hide the cell then
cellHeight = 44; // 44 is an example
cellNeedHide.hidden = NO;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    switch (section) {
    // for example section 0 , row 0 is the cell you wanna hide.
    case 0:
        switch (row) {
            case 0:
            return cellHeight;
        }
    }
}

Upvotes: 1

Barjavel
Barjavel

Reputation: 1636

When the user taps on a segment execute a new fetch request on your managed object to give you an appropriate array (either an array of all dates, or the greater/equal dates). Then use reloadData on the tableView using this new array in the datasource.

or

Give the cell's you wish to hide a height of 0?

Upvotes: 1

Related Questions