Я отображаю в группе tableview
содержимое, проанализированное из XML. Я хочу отключить событие щелчка по нему (я вообще не смогу его щелкнуть). Таблица содержит две группы. Я хочу отключить выбор только для первой группы, но не для второй группы. Нажав на первый ряд второй группы navigates
на мою трубку player view
.
Как я могу сделать только определенные группы или строки по выбору?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section!=0)
if(indexPath.row==0)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:tubeUrl]];
}
Спасибо.
tableView:shouldHighlightRowAtIndexPath:
это новыйUITableViewDelegate
метод, который возвращает вBOOL
зависимости от того,indexPath
должен ли выделенный элемент выделяться. Если вы используете 6.0 и более поздние версии, я настоятельно рекомендую этот новый API.cell!.selectionStyle = .None
какая сила разворачивает ячейку, позволяя вам получить доступ к ее свойствам.Если вы хотите сделать строку (или подмножество строк) невыбираемой , реализуйте
UITableViewDelegate
метод-tableView:willSelectRowAtIndexPath:
(также упомянутый TechZen). ЕслиindexPath
не следует выбирать , вернитеnil
, в противном случае вернитеindexPath
. Чтобы получить поведение выбора по умолчанию, вы просто возвращаетеindexPath
переданный в вашdelegate
метод метод, но вы также можете изменить выбор строки, вернув другойindexPath
.пример:
источник
Начиная с iOS 6, вы можете использовать
Если вы вернетесь
NO
, он отключит подсветку выделения и сегменты, запускаемые раскадровкой, связанные с этой ячейкой.Метод вызывается, когда касание падает на строку. Возврат
NO
к этому сообщению останавливает процесс выбора и не приводит к тому, что выбранная строка в данный момент теряет выбранный вид, пока касание не работает.Ссылка на протокол UITableViewDelegate
источник
Ни один из ответов выше не решает проблему правильно. Причина в том, что мы хотим отключить выделение ячейки, но не обязательно подпредставлений внутри ячейки.
В моем случае я представлял UIS-переключатель в середине строки и хотел отключить выбор для остальной части строки (которая пуста), но не для переключателя! Правильный способ сделать это, следовательно, в методе
где утверждение формы
отключает выбор для конкретной ячейки, в то же время позволяет пользователю манипулировать переключателем и, следовательно, использовать соответствующий селектор. Это не так, если кто-то отключает взаимодействие с пользователем через
метод, который просто подготавливает ячейку и не позволяет взаимодействовать с UISwitch.
Кроме того, используя метод
чтобы отменить выбор ячейки с заявлением в форме
по-прежнему показывает выбранную строку, пока пользователь нажимает на исходный contentView ячейки.
Просто мои два цента. Я уверен, что многие найдут это полезным.
источник
willSelectRowAtIndexPath
имеет ту же проблему, подпредставления не выбираются.Вы перехватываете выборки с помощью этих методов источника данных.
В этих методах вы проверяете, является ли выбранная строка той, которую вы хотите выбрать. Если это так, принять меры, если нет, ничего не делать.
К сожалению, вы не можете отключить выбор только для одного раздела. Это весь стол или ничего.
Однако вы можете установить для
selectionStyle
свойства ячейки таблицы значениеUITableViewCellSelectionStyleNone
. Я считаю, что сделает выбор невидимым. В сочетании с описанными выше методами, которые должны заставить клетки выглядеть полностью инертными с точки зрения пользователя.Edit01:
Если у вас есть таблица, в которой выбираются только некоторые строки, важно, чтобы ячейки выбираемых строк визуально отличались от невыбираемых строк. Кнопка аксессуара шеврона - способ сделать это по умолчанию.
Однако вы не хотите, чтобы ваши пользователи пытались выбрать строки и думали, что приложение работает неправильно, потому что строка ничего не делает.
источник
Help -> Developer documentation
, затем скопировать имена этих методов в поле поиска, чтобы увидеть, как он работает. Документация разработчика также содержит пример кода.Для Swift 4.0 например:
источник
Вам нужно сделать что-то вроде следующего, чтобы отключить выбор ячейки в
cellForRowAtIndexPath
методе:Чтобы ячейка отображалась серым цветом, поместите в
tableView:WillDisplayCell:forRowAtIndexPath
метод следующее:Один метод позволяет вам контролировать интерактивность, другой позволяет контролировать внешний вид пользовательского интерфейса.
источник
Чтобы остановить только некоторые ячейки, используйте:
Наряду с предотвращением выделения это также останавливает tableView: didSelectRowAtIndexPath: вызывается для ячеек, для которых он установлен.
источник
userInteractionEnabled
NO на одну ячейку (точнее, один indexPath), пользовательское взаимодействие некоторых ДРУГИХ ячеек отключается. Я понятия не имею, почему это происходит каждый раз, когда я используюuserInteractionEnabled
ячейки табличного представления. Это известная ошибка или я что-то не так сделал?if [indexPath row] == 0
) вNO
intableView:cellForRowAtIndexPath:
после удаления очереди из ячейки. Сначала все работает нормально. Затем, после нескольких вызововreloadData
, вдруг пятый ряд запрещает взаимодействие, затем четвертый ряд ... Я не могу понять, когда это произойдет. Все выглядит случайным.if [indexPath row] == 0) { set to NO } else { set to YES }
Вы можете использовать
tableView:willDisplayCell
метод, чтобы выполнить все виды настройки для tableViewCell.В этом коде выше пользователь может выбрать только первую строку во втором разделе tableView. Остальные все строки не могут быть выбраны. Спасибо! ~
источник
Для быстрой:
источник
Мое решение на основе модели данных:
источник
Для Swift 4.0 это сделает свое дело. Он отключит ячейку в методе didSelectRowAtIndexPath, но при этом подпредставления будут активными.
источник
return indexPath.row == clickableIndex ? indexPath : nil
сохраняет ваш код немного чище ;-)Используйте это, чтобы ячейка выглядела как отключенная и недоступная для выбора:
Важное замечание: обратите внимание, что это только свойство стиля, которое фактически не отключает ячейку. Чтобы сделать это, вы должны проверить
selectionStyle
в вашейdidSelectRowAtIndexPath:
реализации делегата:источник
Мне нравится ответ Брайана Чападоса выше. Однако это означает, что у вас может быть дублированная логика как в cellForRowAtIndexPath, так и в willSelectRowAtIndexPath, которая может легко выйти из синхронизации. Вместо дублирования логики, просто проверьте selectionStyle:
источник
Я нашел это удобным, поскольку он работает как со статическими, так и с динамическими таблицами. Я только устанавливаю индикатор раскрытия на те ячейки, которые я хочу разрешить выбор.
источник
на Xcode 7 без кодирования вы можете просто сделать следующее:
В виде структуры выберите Ячейка табличного представления. (Ячейка вложена в «Сцена контроллера табличного представления»> «Контроллер табличного представления»> «Представление таблицы». Возможно, вам придется раскрыть эти объекты, чтобы увидеть ячейку табличного представления)
В инспекторе атрибутов найдите поле с меткой «Выбор» и выберите «Нет». Инспектор атрибутов С помощью этой опции ячейка не будет получать визуальное выделение, когда пользователь нажимает на нее.
источник
ПРОСТО
Просто используйте
cell.userInteractionEnabled = YES;
для клетки, если она может перемещаться и вcell.userInteractionEnabled = NO;
противном случаеисточник
Реализуйте только метод
tableView:willSelectRowAtIndexPath:
в источнике данных для вашей таблицы. Если вы хотите, чтобы строка в пути была выделена, верните указанный indexPath. Если нет, верните ноль.Пример из моего приложения:
Хорошая вещь об этом - то,
shouldPerformSegueWithIdentifier:sender:
что не будет вызван, если вышеупомянутый метод возвращает ноль, хотя я повторяю тест выше только для полноты.источник
Для Xcode 6.3:
источник
Я согласен с ответом Брайана
если я сделаю
тогда подпредставления внутри ячейки не будут взаимодействовать с пользователем.
На другом сайте настройка
вызовет метод didSelect, несмотря на то, что цвет обновления не обновляется.
Используя willSelectRow, я решил свою проблему. Пример:
источник
appart от
tableView.allowsMultipleSelection = true
вас нужно будет отменить выбор остальных ячеек раздела при выборе:источник
для swift 3.0 вы можете использовать приведенный ниже код, чтобы отключить взаимодействие пользователя с ячейкой UITableView
источник