Все еще проблема с установкой -WorkingDirectory в каталог exe ... обнаружил, что параметр -WorkingDirectory для C: \ Windows \ System32 и используемый путь fq для работы exe.
Для меня следующее работало нормально:
tableView.allowsSelection = false
Это означает, что didSelectRowAt #
просто не будет работать. Другими словами, прикосновение к строке таблицы как таковой ничего не даст. (И, следовательно, очевидно, что выбранной анимации никогда не будет.)
(Обратите внимание, что если в ячейках есть UIButton
или какие-либо другие элементы управления, конечно, эти элементы управления будут работать. Любые элементы управления, которые у вас есть в ячейке таблицы, совершенно не связаны со способностью UITableView позволять вам «выбирать строку» с помощью didSelectRowAt #
.)
Еще один момент, на который следует обратить внимание: Это не ' t работают, когда UITableView
находится в режиме редактирования. Чтобы ограничить выбор ячеек в режиме редактирования, используйте следующий код:
tableView.allowsSelectionDuringEditing = false
Вы можете использовать ....
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
Быстрое решение с пользовательской ячейкой:
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
}
}
Лучшим решением было бы Создание стиля выделения Нет
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
Однако здесь мы рассматриваем тот факт, что для выбранного состояния не используются пользовательские изображения.
Вы можете использовать свойство selectionStyle UITableViewCell
cell.selectionStyle = UITableViewCellSelectionStyleNone;
Или
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
. Кроме того, не используйте ниже делегат
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ... }
Если вы создали файл Xib / Storyboard, то вы можете изменить свойство setUserInteractionEnabled для tableview на Нет , сняв флажок. Это сделает ваш просмотр таблицы только для чтения.
Вы можете отключить подсветку ячейки таблицы, используя следующий код в (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
}
Для отключения подсветки UItableviewcell
cell.selectionStyle = UITableViewCellSelectionStyleNone;
И не следует позволять пользователю взаимодействовать с ячейкой.
cell.userInteractionEnabled = NO;
Я использую это, что работает для меня.
cell?.selectionStyle = UITableViewCellSelectionStyle.None
В случае, если кому-то нужен ответ для Swift :
cell.selectionStyle = .None
Это то, что я использую, в cellForRowAtIndexPath
напишите этот код .:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
попробуйте
cell.selectionStyle = UITableViewCellSelectionStyleNone;
и
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
, и вы также можете установить стиль выбора с помощью Interface Builder.
Вам просто нужно поместить этот код в cellForRowAtIndexPath
Чтобы отключить свойство выбора ячейки: (При касании ячейки).
cell.selectionStyle = UITableViewCellSelectionStyle.None
Попробуйте ввести:
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)
}
Вы также можете отключить выбор строки в самом построителе интерфейса, выбрав NoSelection
из опции selection
(свойств UITableView) на панели инспектора, как показано на изображении ниже
Если вы хотите, чтобы выделение только мигало, а не оставалось в выбранном состоянии, вы можете вызвать в
didSelectRowAtIndexPath
следующие
[tableView deselectRowAtIndexPath:indexPath animated:YES];
, чтобы оно мигало в выбранном состоянии. и вернуться.
Из протокола UITableViewDelegate
вы можете использовать метод willSelectRowAtIndexPath
и return nil
, если не хотите выбирать строку.
Таким же образом вы можете использовать метод willDeselectRowAtIndexPath
и return nil
, если не хотите, чтобы строка отменяла выбор.
Все, что вам нужно сделать, это установить стиль выбора для экземпляра UITableViewCell
, используя:
Objective-C:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
или
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
Swift 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
Swift 3 и 4.x:
cell.selectionStyle = .none
Далее, убедитесь, что вы либо не внедрили -tableView:didSelectRowAtIndexPath:
в свой делегат табличного представления, либо явно исключили Клетки, которые вы хотите, чтобы у вас не было никаких действий, если вы их реализуете.
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
}
Я тоже с этим боролся, потому что в моем UITableViewCell
контроле было запрещено использование свойства userInteractionEnabled
. У меня есть статическая таблица с 3 ячейками для настроек, 2 с датами, 1 с переключателем вкл / выкл. После игры в Storyboard / IB мне удалось сделать нижнюю одну невыбираемой, но при нажатии на нее выбор из одной из верхних строк исчезает. Вот WIP-изображение с моими настройками UITableView:
Если коснуться 3-го ряда, то вообще ничего не происходит, выбор останется на втором ряду. Функциональность практически является копией экрана выбора времени добавления приложения Apple Calendar.
Код на удивление совместим, вплоть до IOS2 = /:
- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 2) {
return nil;
}
return indexPath;
}
Это работает в сочетании с установкой стиля выделения на none, поэтому ячейка не мерцает при событиях касания
Вы также можете сделать это из раскадровки. Щелкните ячейку табличного представления и в инспекторе атрибутов в разделе «Ячейка табличного представления» измените раскрывающийся список рядом с «Выделением» на «Нет».
Подводя итог, я считаю, правильных ответов, основанных на моем собственном опыте реализации этого:
Если вы хотите отключить выбор только для некоторых ячеек, используйте:
cell.userInteractionEnabled = NO;
Наряду с предотвращением выделения, это также останавливает tableView: didSelectRowAtIndexPath: вызывается для ячеек, для которых он установлен. (Благодарю за этот ответ Тони Миллион, спасибо!)
Если в ваших ячейках есть кнопки, которые нужно нажимать, вам нужно вместо этого:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
и вам также нужно игнорировать любые щелчки по ячейке в - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
.
Если вы хотите отключить выбор для всей таблицы, используйте:
tableView.allowsSelection = NO;
(Благодарю Пауло де Барроса, спасибо!)
Хотя это лучшее и простое решение для предотвращения выделения строки во время выделения
cell.selectionStyle = UITableViewCellSelectionStyleNone;
Я также хотел бы предложить, что иногда полезно кратко показать, что строка выбрана а затем выключить его. Это предупреждает пользователей с подтверждением того, что они намеревались выбрать:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}
Сценарий - 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