Matt Hammond
Matt Hammond

Reputation: 785

Perform segue when cell with ID is selected

I am trying to create a segue happen when a cell has been selected. I have tired using cell.dequeueReusableCellWithIdentifier(""). However it is returning "nil" whilst unwrapping. I have set up the cells ID correctly and they match. Any help is greatly appreciated!!

if menuTableView.dequeueReusableCellWithIdentifier("") == "logout" {
            print("logout")
            performSegueWithIdentifier("logoutSegue", sender: self)
}

Thanks in advance

Upvotes: 0

Views: 117

Answers (1)

Alex Catchpole
Alex Catchpole

Reputation: 7336

There is a UITableView delegate method for when a user selects a cell, this is good for knowing when a user has selected a cell, but we need to identify if it is the logout cell that has been pressed.

To identify the cell we'll be setting the tag property of the your logout cell.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if indexPath.row == 0 {
        //this is the indexPath row where we want our login cell to be showed
        let loginCell = tableView.dequeueReusableCellWithIdentifier("login", forIndexPath: indexPath) as! LoginTableViewCell
        //set the tag so when we select the cell we can see if the cell we have selected has a tag of 5
        loginCell.tag = 5
        return loginCell
    }else {
        //here goes our other cells, in this case they'll just be normal UITableViewCell
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
        return cell
    }
}

In our cellForRowAtIndexPath delegate method we'll instantiate the loginTableViewCell in the first row and set its tag to 5, if the row isn't 0 we simply return our normal cell

So now we have a cell where the tag is 5 and all the other cells do not have a default tag property of 0, now, when the user selects a cell we can check for this method in the didSelectRowAtIndexPath delegate method of our table view.

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let cell = tableView.cellForRowAtIndexPath(indexPath)!
    if cell.tag == 5 {
        //cell is login cell
        //perform segue here            
    }
}

This delegate method gives us the table view and the indexPath of the selected cell. Now we call CellForRowAtIndexPath on the table view to get the cell that was selected. Now that we have the cell we can compare the cell's tag. If the tag is 5 the logout cell was selected so we can perform our segue there.

Upvotes: 2

Related Questions