Как я могу сделать свойство ячейки UITableView недоступным для выбора? Я не хочу видеть это синее поле выбора, когда пользователь нажимает на ячейку.
iphone
cocoa-touch
Mugunth
источник
источник
tableView:shouldHighlightRowAtIndexPath:
как отмечает Аюш нижеОтветы:
Задайте для
selectionStyle
свойства ячейки таблицы значениеUITableViewCellSelectionStyleNone
. Это должно предотвратить его выделение, и вы также можете проверить это свойство в своемtableView:didSelectRowAtIndexPath:
.источник
Чтобы предотвратить выбор строки
Для того, чтобы полностью предотвратить выделение из
UITableViewCell
, есть вашUITableViewDelegate
реализоватьtableView:willSelectRowAtIndexPath:
. Из этого метода вы можете вернуться,nil
если не хотите, чтобы строка выбиралась.Это предотвращает выбор и
tableView:didSelectRowAtIndexPath:
вызов строки . Обратите внимание, однако, что это не предотвращает выделение строки.Чтобы предотвратить выделение строк
Если вы хотите, чтобы строка не выделялась визуально при прикосновении, вы можете убедиться, что для ячейки
selectionStyle
установлено значениеUITableViewCellSelectionStyleNone
, или, желательно, вы можете иметь своеUITableViewDelegate
приспособлениеtableView:shouldHighlightRowAtIndexPath:
следующим образом:источник
didSelectRowAtIndexPath
потомуwillSelectRowAtIndexPath
что в любом случае он будет вызываться всегда.использовать это:
источник
didSelectRowAtIndexPath
все еще вызывается.Только для iOS 6+.
Вы можете реализовать метод
tableView:shouldHighlightRowAtIndexPath:
в своем делегате. Подробнее читайте здесь: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html.источник
Если бы эта проблема тоже перепробовала все уже упомянутое. Последней уловкой, позволившей избавиться от «синей вспышки» при выборе ячейки таблицы, было добавление такой строки:
Не уверен, была ли это одна линия или все вместе, но в целом я не получил больше синего выделения или даже синей вспышки. Счастливый!
источник
Устанавливать
cell.userInteractionEnabled = NO;
источник
Использование IB также является элегантным способом:
источник
Apple говорит, что первое, что вы должны сделать в didSelectRowAtIndexPath, - это отменить выбор строки
Затем вы можете изменить AccessoryType на галочку или на отсутствие и т. Д. Итак, когда вы вводите didSelectRowAtIndexPath, вы можете отменить выбор строки, и если она не предназначена для выбора, просто не проверяйте эту строку.
Руководство по программированию в табличном представлении
источник
Другой способ - добавить в
UITableViewCell
. Мне этот ответ нравится больше, чем ответ Себастьяна (тоже хороший), потому что я строю свой стол. Я подумал, что это может быть полезно кому-то другому.источник
Swift 4:
вы можете предотвратить выбор и выделение с помощью UITableViewDelegate: shouldHighlightRowAt
Этот ответ предполагает, что у вас есть созданная настраиваемая ячейка с именем: CustomTableViewCell
И что вы создали логическое значение внутри этой настраиваемой ячейки с именем: isSelectable
Это Swift-версия ответа Objc Себастьяна Селиса.
источник
Если вы создали свою ячейку в Interface Builder, вы можете сделать это, сняв флажок « Взаимодействие с пользователем включено » для
tableViewCell
.источник
Есть еще один простой способ избежать выделения синего цвета.
Выберите ячейку, которая не должна отображаться синим цветом.
Затем выберите инспектор атрибутов (значок щита рядом со значком линейки на панели свойств сбоку).
Затем измените значение поля «Выбор» с «Синего» на «Нет».
Обратите внимание: по-видимому, он все еще выбирается, он просто не будет отображаться как выбранный, если все, что вы хотите, - это избежать эффекта пользовательского интерфейса.
источник
Используйте tableView: willDisplayCell: forRowAtIndexPath: вместо tableView: didSelectRowAtIndexPath:, чтобы избавиться от вспышки, которая появляется при первом прикосновении к ячейке.
источник
Чтобы сделать определенную строку невыделенной, вам необходимо внести некоторые изменения в два метода делегата UITableView.
В методе ниже
после выделения ячейки напишите код ниже
Приведенный выше код предотвратит выделение ячейки, если каким-то образом пользователь попытается выбрать.
в этом методе делегата ниже
если вы не пишете,
if(indexPath.row == someCellNumber) return;
строка все равно будет выбрана, и есть вероятность сбоя приложенияисточник
Swift 4:
В классе ячеек:
источник
Swift 5
источник