отключить выделение uitableview, но разрешить выбор отдельных ячеек

83

когда вы нажимаете на ячейку, строка выбирается и выделяется. Теперь я хочу отключить выделение, но разрешить выделение. Есть ли способ обойти это. Есть вопрос, который отвечает на это, но он отключает как выделение, так и выделение.

солдатский
источник
8
cell.selectionStyle = UITableViewCellSelectionStyleNone;добавьте это в свой cellForRowAtIndexPathметод
Шрути

Ответы:

182

Вы можете просто установить стиль выделения ячейки на «Нет» в Раскадровке:

Глянь сюда

Или из кода:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Для Swift 3:

cell.selectionStyle = UITableViewCellSelectionStyle.none

Для Swift 4 и выше:

cell.selectionStyle = .none
Йожеф Веша
источник
Когда я выбираю «Нет», я теряю способность работать в выделенном состоянии. Могу ли я сделать фон пустым / белым без потери этого состояния?
Шон
В какой функции это пойдет? Я предполагаю "cellForRowAt"?
Дэниел Спрингер
Вы должны делать это в ячейке, а не в табличном представлении
Салем Бинмусаед
26

Изменить UITableViewCell«S selectedBackgroundViewцвет прозрачный.

    let clearView = UIView()
    clearView.backgroundColor = UIColor.clearColor() // Whatever color you like
    UITableViewCell.appearance().selectedBackgroundView = clearView

или установить для конкретной ячейки:

cell.backgroundView = clearView

Tounaobun
источник
1
Это лучший вариант, поскольку cell.selectionStyle = UITableViewCellSelectionStyleNoneиногда что-то ломает глубоко внутри логики анимации Apple.
orkenstein
тогда используйте вместо этого ..UITableViewCell.appearance().selectionStyle = .None
vaibhav
Это удобно, если в ячейке есть элементы, которые можно выбрать.
Matthew Korporaal
Отличное решение. Помещение этого кода в awakeFromNib()функцию ячейки
приносит
Эта опция делает невидимой линию разделителя ячеек табличного представления.
jonye ._. Jin
8

Попробуйте установить для стиля выделения ячеек значение Нет -

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Это решит вашу проблему

Гадюка
источник
6

Для Swift:

UITableViewCell.selectionStyle = UITableViewCellSelectionStyle.None;

Или когда вы быстро подклассифицируете ячейку:

class CustomCell : UITableViewCell {

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        selectionStyle = .None
    }

}
Мелвин
источник
6

в быстром 3

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
}
Сай Кумар Редди
источник
2

Чтобы добавить собственный цвет, используйте приведенный ниже код. И чтобы было прозрачно использоватьalpha: 0.0

cell.selectedBackgroundView = UIView(frame: CGRect.zero)
cell.selectedBackgroundView?.backgroundColor = UIColor(red:0.27, green:0.71, blue:0.73, alpha:1.0)

Если вы используете собственный цвет и хотите придать ему скругленный вид, используйте:

cell.layer.cornerRadius = 8

Также используйте это для лучшей анимации и ощущения

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    tableView.deselectRow(at: indexPath, animated: true)
}
Prateekro
источник
1

Для тех, кто ищет программный путь в Swift 3

cell.selectionStyle = UITableViewCellSelectionStyle.none

Данорам
источник
1

Вы можете установить свойство выбора самой ячейки в раскадровке введите описание изображения здесь

МНЕ
источник
0

Для Objc:

[setSelectionStyle ячейки: UITableViewCellSelectionStyleNone];

- (void)viewDidLoad {
  [super viewDidLoad];
  _tableView.allowsSelection = YES;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    .. .. .. .. 
   [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
   . . . . .. 
}
Лахдип Сингх
источник
0

Для Swift 5 лучший способ:

cell.selectionStyle = .none
рамзесенок
источник
-1

Вот решение для Swift 3, работает даже в режиме редактирования

cell.selectionStyle = .gray
cell.selectedBackgroundView = {

    let colorView = UIView()
    colorView.backgroundColor = UIColor.black.withAlphaComponent(0.0)
    //change the alpha value or color to match with you UI/UX

    return colorView
}()
DukeX
источник