TableView _: didSelectRowAt: запускается только при касании - PullRequest
1 голос
/ 06 мая 2019

Я показываю 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 из своего представления и теперь работает нормально!

1 Ответ

2 голосов
/ 06 мая 2019

проверьте, что вы применили жест касания к этому контроллеру представления или нет, потому что он заблокирует вас в выборе tableView.

, следуя коду метода делегирования жеста касания, вы можете разблокировать ваш выбор tableView.

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if([touch.view isDescendantOfView:YOUR_TABLE_NAME])
    {
        return NO;
    }
    return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...