Я показываю UITableView с ячейками по умолчанию и isEditing / allowMultipleSelection со значением true
.На _:viewForHeaderInSection:
Я настроил CustomView с пользовательским делегатом, чтобы получать отзывы об изменениях в этом представлении.
Когда пользователь нажимает на ячейку, эта ячейка превращается в выбранный цвет, но когда пользователь освобождает ячейку, он меняется на невыбранный, в этот момент _:didSelectRowAt:
не был запущен.
Когда пользователь нажимает на ячейку и делает жест слайд (касание, удержание и перемещение), ячейка становится выбранной и _:didSelectRowAt:
срабатывает.
Мне нужно нормальное поведение tableView (выбрать при нажатии) с множественным выбором.
Я пытался удалить все остальные делегаты в этом представлении (включая настраиваемое представление для заголовка)в разделе), полностью удалите пользовательский вид заголовка, удалите UITableView из моего .xib и добавьте его снова, измените положение при настройке табличного представления, установите для свойств isEditing
и allowsMultipleSelection
значение false
.
НастройкаTableView
private func setupTableView() {
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.tableFooterView = UIView()
self.tableView.isEditing = true
self.tableView.allowsMultipleSelection = true
self.tableView.allowsMultipleSelectionDuringEditing = true
}
делегат и источник данных tableview
@IBOutlet weak var tableView: UITableView!
private let header = TableViewHeader()
[...]
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return datasource.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = dataSource[indexPath.row].title
return cell
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
self.header.delegate = self
return self.header.view
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 50
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let selectedRows = tableView.indexPathsForSelectedRows {
if selectedRows.count > 5 {
tableView.deselectRow(at: indexPath, animated: true)
}
}
}
Я удалил пользовательский UITapGestureRecognizer из своего представления и теперь работает нормально!