Nano Hash - криптовалюты, майнинг, программирование

UIButton, влияющий на внешний вид UICollectionViewCell

Хорошо, у меня есть 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)
    }
}

  • было бы полезно, если бы вы могли поделиться кодом... трудно диагностировать проблему без кода. Возможно, вы случайно связали какие-то переменные вместе или, возможно, выходы неверны? 17.01.2019
  • Вы перезагружаете представление коллекции, когда нажимаете кнопку? 17.01.2019
  • Покажите нам, что я не уверен, код действия кнопки и как вы выделяете нажатую ячейку в представлении коллекции 17.01.2019
  • Что делает saveAppointment? Я вижу, что он также используется в collectionView, поэтому я думаю, что он что-то делает с collectionView. Не должно. Итак, возможно, вы могли бы добавить параметр saveAppointment, например, update: Bool ; и передать false из IBAction, true из didSelectItem. Используйте его в saveAppointment, чтобы пропустить изменение в CollectionView, если оно ложно. 17.01.2019

Ответы:


1

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

17.01.2019
  • Это неправильно. Вы можете перезагрузить представление коллекции, вам просто нужно сохранить некоторый источник данных (поскольку ячейки коллекции можно использовать повторно) для вашего представления коллекции, который говорит что-то вроде: если indexPath.item равен 0, цвет будет таким 17.01.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..