ios - uitableviewdelegate - Как отключить выбор UITableView?




uitableviewcontroller (20)

Когда вы нажимаете строку в UITableView , строка подсвечивается и выбирается. Можно ли отключить это, так что нажатие строки ничего не делает?


Objective-C:

  1. Внизу снимок отключить выделение, но также отключить вызов didSelectRowAtIndexPath . Поэтому, если вы не используете didSelectRowAtIndexPath используйте ниже метод. Это необходимо добавить, когда вы создаете таблицу. Однако это будет работать с кнопками и UITextField внутри ячейки.

    self.tableView.allowsSelection = NO;
    
  2. Внизу снимок отключить выделение, и он не отключает вызов didSelectRowAtIndexPath . Установите для стиля выделения ячейки значение None в cellForRowAtIndexPath

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
  3. Ниже фрагмента отключить все, что есть в ячейке. Это отключит взаимодействие с buttons , textfields :

    self.tableView.userInteractionEnabled = false;
    

Swift:

Ниже приведены эквиваленты Swift выше, чем Objective-C :

  1. Замена первого решения

    self.tableView.allowsSelection = false
    
  2. Замена второго раствора

    cell?.selectionStyle = UITableViewCellSelectionStyle.None
    
  3. Замена третьего решения

    self.tableView.userInteractionEnabled = false
    

В вашем XIB в UITableViewCell в Attribute Inspector установите значение « Selection на « None .


Вам просто нужно поместить этот код в cellForRowAtIndexPath

Чтобы отключить свойство выбора ячейки: (При нажатии на ячейку).

cell.selectionStyle = UITableViewCellSelectionStyle.None

Все, что вам нужно сделать, это установить стиль выделения на экземпляре UITableViewCell используя:

Objective-C:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

или же

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Swift 2:

cell.selectionStyle = UITableViewCellSelectionStyle.None

Swift 3 и 4.x:

cell.selectionStyle = .none

Кроме того, убедитесь, что вы либо не реализуете -tableView:didSelectRowAtIndexPath: в -tableView:didSelectRowAtIndexPath: таблицы или явно исключаете ячейки, в которых вы не хотите действовать, если вы его реализуете.

Подробнее здесь и here


Вы можете использовать это

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Вы также можете отключить выбор строки из самого конструктора интерфейса, выбрав NoSelection из опции selection (из свойств UITableView) в панели инспектора, как показано на рисунке ниже.


Вы также можете установить цвет фона в Clear для достижения того же эффекта, что и UITableViewCellSelectionStyleNone , если вы не хотите / не можете использовать UITableViewCellSelectionStyleNone .

Вы бы использовали следующий код:

UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];

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


Для меня все работало нормально:

tableView.allowsSelection = NO;

Это означает, что didSelectRowAt# просто не будет работать. То есть прикосновение к ряду таблицы, как таковое, ничего не сделает. (И, следовательно, очевидно, что никогда не будет выбранной анимации.)

(Обратите внимание: если на ячейках у вас есть UIButton или любые другие элементы управления, конечно, эти элементы управления будут по-прежнему работать. Любые элементы управления, которые у вас есть на ячейке таблицы, полностью не связаны с возможностью UITableView, позволяющей вам «выбрать строку "using didSelectRowAt# .)


Из UITableViewDelegate Protocol вы можете использовать метод willSelectRowAtIndexPath и return nil willSelectRowAtIndexPath если вы не хотите, чтобы выбранная строка была выбрана.

Точно так же вы можете использовать метод willDeselectRowAtIndexPath и return nil willDeselectRowAtIndexPath если вы не хотите, чтобы строка была отменена.


Мы можем написать код, как

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

но когда у нас есть пользовательская ячейка xib выше строки, выдается предупреждение в это время для

пользовательский элемент xib

нам нужно установить стиль выбора None из построителя интерфейса


Подводя итог тому, что я считаю правильным, основываясь на собственном опыте реализации этого:

Если вы хотите отключить выбор только для некоторых ячеек, используйте:

cell.userInteractionEnabled = NO;

Помимо предотвращения выбора, это также останавливает tableView: didSelectRowAtIndexPath: вызывается для ячеек, которые он установил. (Кредит отправляется Тони Миллион за этот ответ, спасибо!)

Если у вас есть кнопки в ячейках, которые нужно щелкнуть, вам нужно:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

и вам также нужно игнорировать любые клики на ячейке in - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath .

Если вы хотите отключить выбор для всей таблицы, используйте:

tableView.allowsSelection = NO;

(Поблагодарите Пауло де Барроса, спасибо!)


Попробуйте ввести:

cell.selected = NO;

При необходимости он отменит выбор.

В Swift3 ...

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let r = indexPath.row
    print("clicked .. \(r)")
    tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true)
}

Ты можешь использовать ....

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Хотя это лучшее и простое решение, позволяющее предотвратить отображение строки во время выбора

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Я также хотел бы предложить, что иногда полезно кратко показать, что строка выбрана, а затем отключена. Это предупреждает пользователей с подтверждением того, что они намеревались выбрать:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}

Это то, что я использую:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

в cellForRowAtIndexPath напишите этот код.


Я использую это, что работает для меня.

cell?.selectionStyle = UITableViewCellSelectionStyle.None

для быстрого отмена выбора

cell.selectionStyle = .None

попробуй это

cell.selectionStyle = UITableViewCellSelectionStyleNone;

а также

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

и вы также можете установить стиль выбора с помощью interfacebuilder.


ФИКСИРОВАННОЕ РЕШЕНИЕ ДЛЯ SWIFT 3

cell.selectionStyle = .none

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:NO animated:NO];
[cell setHighlighted:NO animated:NO];

Счастливое кодирование !!!







cocoa-touch