How can I set the UITableView's cell property to be unselectable? I don't want to see that blue selection box when the user taps on the cell.
A table view tracks the height of rows separately from the cells that represent them. UITableView provides default sizes for rows, but you can override the default height by assigning a custom value to the table view's rowHeight property. Always use this property when the height of all of your rows is the same.
So, to remove a cell from a table view you first remove it from your data source, then you call deleteRows(at:) on your table view, providing it with an array of index paths that should be zapped. You can create index paths yourself, you just need a section and row number.
row will be 0. Then it will be 1, then 2, then 3 and so on. You do this so that you can get the correct string from the array each time.
To completely prevent selection of the UITableViewCell
, have your UITableViewDelegate
implement tableView:willSelectRowAtIndexPath:
. From that method you can return nil
if you do not want the row to be selected.
- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path { // Determine if row is selectable based on the NSIndexPath. if (rowIsSelectable) { return path; } return nil; }
This prevents the row from being selected and tableView:didSelectRowAtIndexPath:
from being called. Note, however, that this does not prevent the row from being highlighted.
If you would like to prevent the row from being visually highlighted on touch, you can ensure that the cell's selectionStyle
is set to UITableViewCellSelectionStyleNone
, or preferably you can have your UITableViewDelegate
implement tableView:shouldHighlightRowAtIndexPath:
as follows:
- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { // Determine if row is selectable based on the NSIndexPath. return rowIsSelectable; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With