UITableView несколько конфликтов разделов при прокрутке - PullRequest
0 голосов
/ 11 апреля 2019

есть странная проблема с UITableView. У меня есть 3 источника данных, это означает 3 раздела в UITableView. Когда я прокручиваю UITableView, кнопка и изображения конфликтуют. Кнопка исчезает, изображения деформируются.

Вот мой cellForRowAt метод.

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "eventnetworkingcell", for: indexPath) as! EventNetworkCell

        var name: String = ""
        var job: String = ""
        var company: String = ""
        var img: Int?

        cell.userImageView.layer.cornerRadius = 45
        cell.userImageView.clipsToBounds = true

        if indexPath.section == 0 {

            name = self.matchmaking[indexPath.row].name
            job = self.matchmaking[indexPath.row].job
            company = self.matchmaking[indexPath.row].company
            img = self.matchmaking[indexPath.row].image


        }
        else if indexPath.section == 1 {

            name = self.networkInEvent[indexPath.row].name
            job = self.networkInEvent[indexPath.row].job
            company = self.networkInEvent[indexPath.row].company
            img = self.networkInEvent[indexPath.row].image

            cell.addButtonOutlet.alpha = 0
        }
        else {

            name = self.allAttendees[indexPath.row].name
            job = self.allAttendees[indexPath.row].job
            company = self.allAttendees[indexPath.row].company
            img = self.allAttendees[indexPath.row].image


        }

        cell.nameLabel.text = name
        cell.jobLabel.text = job
        cell.companyLabel.text = company

        if let imgid = img {
            let url = MTApi.url(for: imgid, size: .normal)
            cell.userImageView.sd_setImage(with: url, placeholderImage: nil, options: [], completed: nil)
        }
}
        cell.addButtonOutlet.addTarget(self, action: 
  #selector(self.addNetwork(sender:)), for: .touchUpInside)

        return cell

    }

Когда я удаляю строку cell.addButtonOutlet.alpha = 0, кнопки не исчезают.

И есть видео, которое показывает проблему:

Видео

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019
    var name: String = ""
    var job: String = ""
    var company: String = ""
    var img: Int?

    cell.userImageView.layer.cornerRadius = 45
    cell.userImageView.clipsToBounds = true
    cell.addButtonOutlet.alpha = 1   // add more
    if indexPath.section == 0 {
     ........

и вам следует изучить возможность повторного использования UITableviewCell.

0 голосов
/ 11 апреля 2019

У вас проблема с повторным использованием ячеек.

По сути, происходит то, что tableView создает только столько ячеек, сколько видимых на экране, и как только ячейка прокручивается из поля зрения, она повторно используется для другого элемента в вашем источнике данных.

Причина, по-видимому, исчезновения кнопок в том, что вы уже удалили кнопку ранее, но теперь, при повторном использовании, не сказали ячейке снова показывать кнопку.

Исправить это просто, просто добавьте:

cell.addButtonOutlet.alpha = 0

в ваши разделы 0 и 2 (еще блок).

То же самое с изображениями, предыдущее изображение сохраняется, если только вы не скажете ячейке удалить изображение при необходимости, поэтому просто добавьте это:

if let imgid = img {
    let url = MTApi.url(for: imgid, size: .normal)
    cell.userImageView.sd_setImage(with: url, placeholderImage: nil, options: [], completed: nil)
} else {
    cell.userImageView.image = nil
}
...