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