coolly
coolly

Reputation: 353

How to hide specific cells in a static UItableview, in swift?

No article explains it clearly regarding my query, I have three cells in a static table and I want to hide second cell when users taps on first cell. Any kind of help is appreciated.

Upvotes: 7

Views: 10707

Answers (3)

Nil
Nil

Reputation: 139

For me, setting the height to 0 for some cells and another height for other cells wasn't an option, as all my cells have different height.

I created another cell in Storyboard, and set row height of 0 (in size inspector). Then in the code, I show the cell with height = 0 if I want to hide it, if not, I show the other cell:

if (hideCell) {
            let hiddenCell = tableView.dequeueReusableCell(withIdentifier: "hiddenCell",for: indexPath) as! TheWallTableViewCell
            return hiddenCell
        }
else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath) as! TheWallTableViewCell
        return cell 
}

Upvotes: 0

AnthonyR
AnthonyR

Reputation: 3545

In the didSelectCellAtIndexPath method, you can set the height to 0 to hide it :

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.row == 0 {
        let indexPath = NSIndexPath(forItem: 1, inSection : 0)
        let secondCell = tableview.cellForRowAtIndexPath(indexPath)
        secondCell.frame.size.height = 0;
        self.view.layoutSubviews()
    }
}

If you want an animation, just put self.view.layoutSubviews() in an UIView animation method UIView.animateWithDuration... etc

Upvotes: 0

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726479

Although you cannot stop the static table from trying to show your cells, you can set their height to zero, making them effectively invisible:

Add this method to your table view controller delegate class:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath)
    return cell == myHiddenCell ? 0 :  super.tableView(tableView, heightForRowAtIndexPath:indexPath)
}

Upvotes: 10

Related Questions