UIButton, влияющий на внешний вид UICollectionViewCell - PullRequest
0 голосов
/ 17 января 2019

Хорошо, у меня есть ViewController, который содержит UICollectionView и UIButton.Кнопка - Не внутри представления коллекции.Когда пользователь нажимает на элемент в UICollectionView, у меня есть некоторый код, который меняет цвет фона UIView в ячейке, чтобы показать, что он выбран.У меня есть аналогичный код для UIButton, который меняет цвет фона, когда пользователь нажимает на него, поэтому он действует как стилизованный флажок.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю на элемент в представлении коллекции, он выделяется так, как должен.Но затем, если я нажимаю на кнопку, кнопка подсвечивается нормально, но представление коллекции меняет, какой элемент выделен.Даже несмотря на то, что нажатая кнопка находится не внутри представления коллекции и не связана с представлением коллекции.

См. Следующие изображения: первое изображение: я нажал на элемент в представлении коллекции, см. Элементвыделено как обычно.

второе изображение: обратите внимание, что здесь, когда я нажимаю кнопку «Я не уверен», вид коллекции меняется, и выделение переходит в другую ячейку.Но ни один код в DidSelectCellForItemAt не работает

import Foundation

class SchedulingVisitForViewController: SchedulingViewController, UICollectionViewDelegate, UICollectionViewDataSource {

    @IBOutlet weak var collectionView: UICollectionView!
    @IBOutlet weak var continueButton: RoundedButton!
    @IBOutlet weak var notSureButton: RoundedButton!
    @IBOutlet weak var notSureButtonTop: NSLayoutConstraint!

    var collectionData = [[String: String]]()


    override func viewDidLoad() {
        super.viewDidLoad()
        self.appointment = fetchAppointment()
        self.collectionView.delegate = self
        self.collectionView.dataSource = self
        self.collectionData.append([
            "image": "regularExam",
            "text": "Regular Exam",
            "data": "regular_exam"])
        self.collectionData.append([
            "image": "vaccines",
            "text": "Essential Vaccines",
            "data": "vaccines"])
        self.collectionData.append([
            "image": "meds",
            "text": "Parasite Meds",
            "data": "preventitive_meds"])
        self.collectionData.append([
            "image": "dog",
            "text": "My pet is sick",
            "data": "sick_pet"])

        self.notSureButton.layer.shadowColor = Constants.appColor.gray.light.cgColor
        self.notSureButton.layer.shadowOffset = CGSize(width: 0, height: 2.0)
        self.notSureButton.layer.shadowRadius = 3.0
        self.notSureButton.layer.shadowOpacity = 0.8
        self.notSureButton.layer.masksToBounds = false
    }

    override func viewDidLayoutSubviews(){
        self.collectionView.frame = CGRect(x: self.collectionView.frame.origin.x, y:  self.collectionView.frame.origin.y, width: self.collectionView.frame.size.width, height: CGFloat(2 * 170))
        self.notSureButtonTop.constant = CGFloat(2 * 170) + 20.0
        self.view.layoutIfNeeded()
        self.collectionView.reloadData()
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.collectionData.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SelectVisitForCollectionViewCell", for: indexPath) as! SelectVisitForCollectionViewCell
        let item = indexPath.item

        cell.displayContent(image: UIImage(named: self.collectionData[item]["image"]!)!, text: self.collectionData[item]["text"]!)

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if let cell = collectionView.cellForItem(at: indexPath) as? SelectVisitForCollectionViewCell {
            var categories = self.appointment?.categories
            if let index = categories!.index(of: self.collectionData[indexPath.item]["data"]!) {
                categories?.remove(at: index)
                cell.showSelected(false)
            } else {
                categories?.append(self.collectionData[indexPath.item]["data"]!)
                cell.showSelected(true)
            }

            self.appointment?.categories = categories!

            if (self.appointment?.categories.count)! > 0 {
                self.continueButton.isHidden = false
            } else {
                self.continueButton.isHidden = true
            }

            saveAppointment(data: self.appointment!)
        }
    }


    @IBAction func onNotSureButtonPressed(_ sender: Any) {
        var categories = self.appointment?.categories
        if let index = categories!.index(of: "not_sure") {
            categories?.remove(at: index)
            self.notSureButton.backgroundColor = UIColor.white
            self.notSureButton.setTitleColor(Constants.appColor.gray.dark, for: .normal)
        } else {
            categories?.append("not_sure")
            self.notSureButton.backgroundColor = Constants.appColor.yellow.main
            self.notSureButton.setTitleColor(UIColor.white, for: .normal)
        }

        self.appointment?.categories = categories!

        if (self.appointment?.categories.count)! > 0 {
            self.continueButton.isHidden = false
        } else {
            self.continueButton.isHidden = true
        }
        print(self.appointment?.categories)
        saveAppointment(data: self.appointment!)
    }

    @IBAction func onContinueButtonPressed(_ sender: Any) {
        self.parentPageboy?.scrollToPage(.next, animated: true)
    }
}

1 Ответ

0 голосов
/ 17 января 2019

caninster_exister указал на то, что я перезагружал представление коллекции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...