UITableview: How to Disable Selection for Some Rows but Not Others

ios, iphone, objective-c, uitableview

Solution

You just have to put this code into `cellForRowAtIndexPath`

To disable the cell's selection property: (while tapping the cell)

cell.selectionStyle = UITableViewCellSelectionStyleNone;

To enable being able to select (tap) the cell: (tapping the cell)

// Default style
cell.selectionStyle = UITableViewCellSelectionStyleBlue;

// Gray style
cell.selectionStyle = UITableViewCellSelectionStyleGray;

Note that a cell with `selectionStyle = UITableViewCellSelectionStyleNone;` will still cause the UI to call `didSelectRowAtIndexPath` when touched by the user. To avoid this, do as suggested below and set.

cell.userInteractionEnabled = NO;

instead. Also note you may want to set `cell.textLabel.enabled = NO;` to gray out the item.

Problem

I am displaying in a group `tableview` contents parsed from XML. I want to disable the click event on it (I should not be able to click it at all) The table contains two groups. I want to disable selection for the first group only but not the second group. Clicking the first row of second group `navigates` to my tube `player view`. How can I make just specific groups or rows selectable? ``` - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if(indexPath.section!=0) if(indexPath.row==0) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:tubeUrl]]; } ``` Thanks.

Original source