Быстрая ячейка выбирается автоматически - PullRequest
1 голос
/ 07 мая 2020

Я создал табличное представление, пожалуйста, найдите прикрепленный снимок экрана TableView

проблема в том, что если я выберу первый элемент в разделе 1, если я прокручу вниз, другой будет выбран автоматически . Вот мой код для cellForItemAt:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    switch (indexPath.section) {
    case 0:
        var cell1 = tableView.dequeueReusableCell(withIdentifier: "selectStory", for: indexPath) as! StorySelectionTableViewCell

        cell1.label.text = self.myStories[indexPath.row].name!
        cell1.select.tag = indexPath.row
        cell1.select.addTarget(self, action: #selector(handleSwitch), for: .valueChanged)
        return cell1
    case 1:
        var cell = tableView.dequeueReusableCell(withIdentifier: "contactCell", for: indexPath) as! ContactsTableViewCell
        cell.selectSwitch.tag = indexPath.row
        cell.thumb.layer.masksToBounds = false
        cell.thumb.layer.cornerRadius = cell.thumb.frame.height / 2
        cell.thumb.clipsToBounds = true
        cell.name.text = myGroups[indexPath.row].name
        cell.selectSwitch.addTarget(self, action: #selector(handleButtonPress), for: .valueChanged)
        if myGroups[indexPath.row].imageUrl != "" && myGroups[indexPath.row].imageUrl != nil {

            let url = URL(string: myGroups[indexPath.row].imageUrl!)
            cell.thumb.kf.setImage(with: url)

        }
        return cell

    case 2:
        var cell = tableView.dequeueReusableCell(withIdentifier: "contactCell", for: indexPath) as! ContactsTableViewCell
        cell.selectSwitch.tag = indexPath.row
        cell.thumb.layer.masksToBounds = false
        cell.thumb.layer.cornerRadius = cell.thumb.frame.height / 2
        cell.thumb.clipsToBounds = true
        cell.name.text = myUsers[indexPath.row].name
        cell.selectSwitch.addTarget(self, action: #selector(handleButtonPress), for: .valueChanged)
        if myUsers[indexPath.row].imageUrl != "" && myUsers[indexPath.row].imageUrl != nil {

            let url = URL(string: myUsers[indexPath.row].imageUrl!)
            cell.thumb.kf.setImage(with: url)

        }
        return cell

            //Access itemsB[indexPath.row]
    default:
        var cell = tableView.dequeueReusableCell(withIdentifier: "contactCell", for: indexPath) as! ContactsTableViewCell
        return cell
            //Access itemsC[indexPath.row]
    }


}

, а вот мой обработчик Switch:

    @objc func handleButtonPress(_ sender: UIButton) {

    let buttonPosition: CGPoint = sender.convert(CGPoint.zero, to: self.collectionView)
    let indexPath = self.collectionView.indexPathForRow(at: buttonPosition)


    switch indexPath!.section {
    case 1:
        if self.selectedGroups.contains(self.myGroups[indexPath!.row].id!) {
            //remove it
            self.selectedGroups = self.selectedGroups.filter {
                $0 != self.myGroups[indexPath!.row].id!
            }
        } else {
            self.selectedGroups.append(self.myGroups[indexPath!.row].id!)
        }
        break
    case 2:
        if self.selectedUsers.contains(self.myUsers[indexPath!.row].id!) {
            self.selectedUsers = self.selectedUsers.filter {
                $0 != self.myUsers[indexPath!.row].id!
            }

        } else {
            self.selectedUsers.append(self.myUsers[indexPath!.row].id!)
        }
        break

    default:
        break
    }
}

Это только между разделами 1 и 2. Раздел 0 работает нормально

1 Ответ

1 голос
/ 07 мая 2020

Или одно, что вы можете сделать, это ... go в ContactsTableViewCell класс и переопределить этот метод

override func prepareForReuse() {
        selectSwitch.setOn(false, animated: false)
         super.prepareForReuse()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...