отключить выделение 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


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
    }

}


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)
}

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];
   . . . . .. 
}


-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
}()
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.