Как я могу отключить выбор UITableView?

Все еще проблема с установкой -WorkingDirectory в каталог exe ... обнаружил, что параметр -WorkingDirectory для C: \ Windows \ System32 и используемый путь fq для работы exe.

1164
задан Malik 21 September 2018 в 06:42
поделиться

23 ответа

Для меня следующее работало нормально:

tableView.allowsSelection = false

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

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

Еще один момент, на который следует обратить внимание: Это не ' t работают, когда UITableView находится в режиме редактирования. Чтобы ограничить выбор ячеек в режиме редактирования, используйте следующий код:

tableView.allowsSelectionDuringEditing = false 
586
ответ дан 19 December 2019 в 20:14
поделиться

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

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
5
ответ дан Mak083 21 September 2018 в 06:42
поделиться

Быстрое решение с пользовательской ячейкой:

import Foundation

class CustomTableViewCell: UITableViewCell
{
  required init(coder aDecoder: NSCoder)
  {
    fatalError("init(coder:) has not been implemented")
  }

  override init(style: UITableViewCellStyle, reuseIdentifier: String?)
  {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    self.selectionStyle = UITableViewCellSelectionStyle.None
  } 
}
5
ответ дан Zorayr 21 September 2018 в 06:42
поделиться

Лучшим решением было бы Создание стиля выделения Нет

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Однако здесь мы рассматриваем тот факт, что для выбранного состояния не используются пользовательские изображения.

5
ответ дан Sangram Shivankar 21 September 2018 в 06:42
поделиться

Вы можете использовать свойство selectionStyle UITableViewCell

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

Или

 [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

. Кроме того, не используйте ниже делегат

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ... }

Если вы создали файл Xib / Storyboard, то вы можете изменить свойство setUserInteractionEnabled для tableview на Нет , сняв флажок. Это сделает ваш просмотр таблицы только для чтения.

5
ответ дан Jayprakash Dubey 21 September 2018 в 06:42
поделиться

Вы можете отключить подсветку ячейки таблицы, используя следующий код в (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


}
1
ответ дан praful argiddi 21 September 2018 в 06:42
поделиться

Для отключения подсветки UItableviewcell

cell.selectionStyle = UITableViewCellSelectionStyleNone;

И не следует позволять пользователю взаимодействовать с ячейкой.

cell.userInteractionEnabled = NO;
6
ответ дан Sharme 21 September 2018 в 06:42
поделиться

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

cell?.selectionStyle = UITableViewCellSelectionStyle.None
10
ответ дан josliber 21 September 2018 в 06:42
поделиться

В случае, если кому-то нужен ответ для Swift :

cell.selectionStyle = .None
34
ответ дан Aks 21 September 2018 в 06:42
поделиться

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

cell.selectionStyle = UITableViewCellSelectionStyleNone;
29
ответ дан Community 21 September 2018 в 06:42
поделиться

попробуйте

cell.selectionStyle = UITableViewCellSelectionStyleNone;

и

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

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

10
ответ дан Deepak Swami 21 September 2018 в 06:42
поделиться

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

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

cell.selectionStyle = UITableViewCellSelectionStyle.None
11
ответ дан Gaurav Patel 21 September 2018 в 06:42
поделиться

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

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)
}
19
ответ дан Fattie 21 September 2018 в 06:42
поделиться

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

UITableView Inspector

48
ответ дан vignesh kumar 21 September 2018 в 06:42
поделиться

Если вы хотите, чтобы выделение только мигало, а не оставалось в выбранном состоянии, вы можете вызвать в

didSelectRowAtIndexPath

следующие

[tableView deselectRowAtIndexPath:indexPath animated:YES];

, чтобы оно мигало в выбранном состоянии. и вернуться.

34
ответ дан Chris Fox 21 September 2018 в 06:42
поделиться

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

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

28
ответ дан Paras Joshi 21 September 2018 в 06:42
поделиться

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

Objective-C:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

или

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Swift 2:

cell.selectionStyle = UITableViewCellSelectionStyle.None

Swift 3 и 4.x:

cell.selectionStyle = .none

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

Больше информации здесь и здесь

1924
ответ дан Sunil Targe 21 September 2018 в 06:42
поделиться

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


}
20
ответ дан heckj 21 September 2018 в 06:42
поделиться

Я тоже с этим боролся, потому что в моем 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, поэтому ячейка не мерцает при событиях касания

14
ответ дан Yarek T 21 September 2018 в 06:42
поделиться

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

5
ответ дан Cindy 21 September 2018 в 06:42
поделиться

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

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

cell.userInteractionEnabled = NO;

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

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

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

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

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

tableView.allowsSelection = NO;

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

82
ответ дан JosephH 21 September 2018 в 06:42
поделиться

Хотя это лучшее и простое решение для предотвращения выделения строки во время выделения

cell.selectionStyle = UITableViewCellSelectionStyleNone;

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}
7
ответ дан Steve Barden 21 September 2018 в 06:42
поделиться

Сценарий - 1

, Если Вы не хотите выбор для некоторых определенных ячеек на tableview, можно установить стиль выбора в функции cellForRow для тех ячеек.

Objective C

cell.selectionStyle = UITableViewCellSelectionStyleNone;

сценарий Swift 4.2

cell.selectionStyle = .none

- 2

Для отключения выбора на целом табличном представлении:

Objective C

self.tableView.allowsSelection = false;

Swift 4.2

self.tableView.allowsSelection = false
0
ответ дан varunrathi28 28 July 2019 в 16:08
поделиться
  • 1
    Вы путаете свойство JavaScript DOM с HTML-атрибутом (и запутываете в восстановлении после ошибки браузера в придачу). – Quentin 18 May 2012 в 09:47
  • 2
    Вы путаете свойство JavaScript DOM с HTML-атрибутом (и запутываете в восстановлении после ошибки браузера в придачу). – Quentin 18 May 2012 в 09:47
Другие вопросы по тегам:

Похожие вопросы: