I have a cell that I am inserting to the top of a UITableView. How can I make sure that when the user clicks on the cell, it doesn't show the blue selected indicator?
To remove the ability of selecting any table cells, or particular table cells based on the row index, use willSelectRowAt
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
return nil
}
To simply remove the UI effect of selecting the element, set the selection style of the UITableViewCell to UITableViewCellSelectionStyleNone
Swift 5:
selectionStyle = .none
cell.selectionStyle = UITableViewCellSelectionStyle.none
–
Humorist cell.selectionStyle = .none
–
Radtke To make a cell completely non-selectable on a per-cell basis two things are required:
1- As others said:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
2- Implement this delegate method as follows:
// Called before the user changes the selection. Return a new indexPath, or nil, to change the proposed selection.
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
if(cell.selectionStyle == UITableViewCellSelectionStyleNone){
return nil;
}
return indexPath;
}
From the Storyboard set the following for the Table View:
Selection: No Selection
Show Selection On Touch: False
you can do
cell.selectionStyle = UITableViewCellSelectionStyleNone;
for Swift 3 you can use
cell.isUserInteractionEnabled = false
tableView:didSelectRowAtIndexPath
delegate method, detect cell index and just do nothing and return. –
Kennithkennon Swift Syntax:
cell.selectionStyle = UITableViewCellSelectionStyle.None
I am answering from point of view of disabling TableViewCell. You can use the storyboard.
XCode Version 8.2.1 (8C1002)
Select the TableVewCell on storyboard and following will be visible on the right side panel - Utilities.
Make the Selection: None
That's all!
The question was how to make certain cells selectable and others not. This was my solution, (after trying lots of other suggestions):
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
if (indexPath.row == 1 || indexPath.row == 2) {
return indexPath
}
return nil
}
Update in Swift 3:
cell.selectionStyle = UITableViewCellSelectionStyle.none
Implement this method of UITableViewDelegate
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
return NO;
}
For Swift 3:
cell.selectionStyle = .none
Swift 5
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! UITableViewCell;
cell.selectionStyle = .none
}
Swift 5
you may wanna try this too
tableView.allowsSelection = false
To remove the ability of selecting any table cells, use willSelectRowAt
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
return nil
}
or by definition during table initialization (if you are not in table editing mode):
tableView.allowsSelection = false
if you need to restrict any table cells selection during table editing:
tableView.allowsSelectionDuringEditing = false
To remove the ability of selecting the top cell use the same function but with statement:
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
if indexPath.row == 0 {
return nil
}
return indexPath
}
To simply remove the UI effect of selecting the element, set the selection style of the UITableViewCell to UITableViewCellSelectionStyleNone
Swift 5:
selectionStyle = .none
© 2022 - 2024 — McMap. All rights reserved.
tableView:didSelectRowAtIndexPath:
still gets called when the cell is tapped. To actually prevent selection you need to implement tableView:willSelectRowAtIndexPath: on yourUITableViewDelegate
and return nil for non-selectable rows. – Bassesalpes