Как я могу отключить выбор UITableView? - PullRequest
1152 голосов
/ 10 октября 2008

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

Ответы [ 36 ]

29 голосов
/ 30 марта 2015

Это то, что я использую, в cellForRowAtIndexPath напишите этот код .:

cell.selectionStyle = UITableViewCellSelectionStyleNone;
28 голосов
/ 30 июня 2009

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

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

20 голосов
/ 22 ноября 2014

Objective-C:

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

    self.tableView.allowsSelection = NO;
    
  2. Ниже фрагмент отключает подсветку и не отключает вызов на didSelectRowAtIndexPath. Установите стиль выделения ячейки Нет в 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
    
19 голосов
/ 27 мая 2011

Попробуйте набрать:

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)
}
18 голосов
/ 30 марта 2015

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


Objective-C:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

или

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];


Swift 2:

cell.selectionStyle = UITableViewCellSelectionStyle.None


Swift 3:

cell.selectionStyle = .none


2 - Не реализовывайте - tableView:didSelectRowAtIndexPath: в табличном представлении delegate и не исключайте явно ячейки, которые вы не хотите выполнять, если вы реализуете это.

3 - Кроме того, вы можете сделать это из раскадровки. Щелкните ячейку табличного представления и в инспекторе атрибутов под ячейкой табличного представления измените раскрывающийся список рядом с «Выделением» на «Нет».


4 - Вы можете отключить подсветку ячейки таблицы, используя следующий код в (iOS) Xcode 9, Swift 4.0

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "OpenTbCell") as! OpenTbCell
        cell.selectionStyle = .none
        return cell


}
14 голосов
/ 04 января 2013

Я тоже с этим боролся, потому что в моем UITableViewCell элементе управления запрещено использование свойства userInteractionEnabled. У меня есть статическая таблица с 3 ячейками для настроек, 2 с датами, 1 с переключателем вкл / выкл. После игры в Storyboard / IB мне удалось сделать нижнюю одну невыбираемой, но при нажатии на нее выбор из одной из верхних строк исчезает. Вот WIP-изображение моих настроек UITableView:

Settings UITableView

Если коснуться 3-го ряда, то ничего не произойдет, выбор останется во втором ряду. Функциональность практически является копией экрана выбора времени добавления приложения Apple Calendar.

Код на удивление совместим, вплоть до IOS2 = /:

- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 2) {
        return nil;
    }
    return indexPath;
}

Это работает в сочетании с установкой стиля выделения на none, поэтому ячейка не мерцает при событиях касания

11 голосов
/ 24 марта 2012

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

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

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

пользовательская ячейка xib

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

11 голосов
/ 18 мая 2016

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

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

cell.selectionStyle = UITableViewCellSelectionStyle.None
10 голосов
/ 09 июля 2012

попробуйте

cell.selectionStyle = UITableViewCellSelectionStyleNone;

и

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

и вы также можете установить стиль выделения, используя interfacebuilder.

10 голосов
/ 19 октября 2015

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

cell?.selectionStyle = UITableViewCellSelectionStyle.None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...