Я работаю над проектом, по которому мне нужно предварительно выбрать конкретную ячейку.
Я могу предварительно выбрать ячейку с помощью -willDisplayCell
, но не могу отменить ее выбор, когда пользователь нажимает на любую другую ячейку.
- (void)tableView:(UITableView*)tableView
willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
if ([appDelegte.indexPathDelegate row] == [indexPath row])
{
[cell setSelected:YES];
}
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
appDelegte.indexPathDelegate = indexPath;
[materialTable deselectRowAtIndexPath:indexpath1 animated:NO];
}
Вы можете помочь?
Ответы:
используйте этот код
Swift 3.0:
источник
willSelectRowAt:
. Смотрите более полный ответ здесь: stackoverflow.com/questions/12693402/…Используйте следующий метод в табличном представлении делегата
didSelectRowAtIndexpath
(или из любого места)источник
indexPathForSelectedRow
это метод, а не свойство.[myTable indexPathForSelectedRow]
. Я проходил через клетки раньше. Спасибо!Попробуй это:
источник
Для этого может быть полезно сделать расширение в Swift.
Swift 4 и Swift 5:
Расширение Swift (например, в файле UITableViewExtension.swift):
Используйте, например:
источник
viewWillAppear()
метод запустения помогает пользователю понять, откуда он возвращается.Пожалуйста, уточните метод делегата, является ли он правильным или нет. Например;
для
источник
Свифт 4:
источник
Это решение для Swift 4
просто добавь
Работает как часы
пример:
источник
Помимо установки выбранной ячейки, вам также необходимо сообщить tableView, что ячейка выбрана. Добавьте вызов к
-tableView:selectRowAtIndexPath:animated:scrollPosition:
вашемуwillDisplayCell:
методу: и вы сможете отменить его, как обычно.Обязательно используйте UITableViewScrollPositionNone, чтобы избежать нечетного поведения прокрутки.
источник
[cell setSelected:YES]
можно было бы опустить:selectRowAtIndexPath
будет позаботится о клеточныхselected
состоянииЭто должно работать:
Просто убедитесь, что materialTable и tableView указывают на один и тот же объект.
Связаны ли материалы с таблицей в Интерфейсном Разработчике?
источник
Основываясь на решении сайкиранов, я написал это, что мне помогло. В файле .m:
И в заголовочном файле:
Я не очень опытный, так что дважды проверьте утечки памяти и т. Д.
источник
Если вы хотите выбрать любую ячейку таблицы одним щелчком мыши и отменить выбор вторым, вам следует использовать этот код:
источник
Свифт 4:
источник
self.tableView(tableView, didDeselectRowAt: indexPath)
после,tableView.deselectRow...
потому что он не вызывался автоматическиSwift 2.0:
источник
попробуй это
источник
поместите этот код в соответствии с вашим кодом, и ваша ячейка будет снята.
источник
Вы можете попробовать это?
Это сработало для меня.
источник
Swift 3.0:
В соответствии с разделом о соответствии протоколов руководства по стилю ray wenderlich swift , чтобы объединить связанные методы, поместите это расширение под классом контроллера вида следующим образом:
источник
стриж
источник
источник
Свифт 3
Я также столкнулся с этим - когда вы переходите или возвращаетесь к табличному представлению, он обычно не отменяет ранее выбранную для вас строку. Я поместил этот код в контроллер табличного представления, и он работает хорошо:
источник
Свифт 3/4
В ViewController:
В пользовательской ячейке:
источник
Swift 3.0
источник
Отменить выделение (DidDeselectRowAt) при первом нажатии из-за предварительно загруженных данных; вам нужно сообщить tableView, что строка уже выбрана для начала, чтобы при первоначальном щелчке отмена выбора строки:
// Swift 3:
источник
Я обнаружил, что помимо установки ячейки в качестве выбранной , вы должны сообщить табличному представлению, чтобы выбрать строку по заданному пути индекса.
источник