Как запретить зеркальному отображению нажатие кнопки в другой ячейке? Часть 2 - PullRequest
0 голосов
/ 30 октября 2019

Это будет часть № 2 моего вопроса Как предотвратить зеркальное отображение ячеек, нажатие кнопки в другой ячейке?

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

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

Я застрял, пытаясьчтобы это работало, и просто не получая нужную удачу, я получал коды ошибок в 3 различных областях во ViewController, которые не позволяют компилировать мой код и заставляют его работать так, чтобы он работал с моими ячейками, которые передают данные в метки изmy cloud Firestore

любая помощь будет оценена и спасибо за ваше время

import Foundation
import UIKit

class Labels {
    var id: String
    var lbl1: String
    var lbl2: String
    var lbl3: String

    init(id: String,
         lbl1: String,
         lbl2: String,
         lbl3: String) {

        self.id = id
        self. lbl1 = lbl1
        self. lbl2 = lbl2
        self. lbl3 = lbl3
    }
    convenience init(dictionary: [String : Any]) {
        let id = dictionary["id"] as? String ?? ""
        let lbl1 = dictionary["lbl1"] as? String ?? ""
        let lbl2 = dictionary["lbl2"] as? String ?? ""
        let lbl3 = dictionary["lbl3"] as? String ?? ""

        self.init(id: id,
                 lbl1: lbl1,
                 lbl2: lbl2,
                 lbl3: lbl3)
    }
}

enum ButtonSelectionIdentity {
    case first
    case second
    case third
}

struct CellModel {
    let buttonSelectionIdentity: ButtonSelectionIdentity
    let labels: Labels
}

import UIKit
import SDWebImage
import Firebase

protocol OptionSelectDelegate: class {
   func onCellModelChange(cell: Cell, model: ButtonSelectionIdentity)
}

class Cell: UITableViewCell {

    weak var labels: Labels!
    private var elements: [ButtonSelectionIdentity] = []

    weak var optionSelectDelegate: OptionSelectDelegate?

    @IBOutlet weak var lbl1: UILabel!
    @IBOutlet weak var lbl2: UILabel!
    @IBOutlet weak var lbl3: UILabel!

    @IBOutlet weak var btnOne: RoundButton!
    @IBOutlet weak var btnTwo: RoundButton!
    @IBOutlet weak var btnThree: RoundButton!

    func configure(withLabels labels: Labels) {
        lbl1.text = labels.lbl1
        lbl2.text = labels.lbl2
        lbl3.text = labels.lbl3
    }

    override func layoutSubviews() {
        super.layoutSubviews()

    }

    func update(with model: ButtonSelectionIdentity) {
        btnOne.backgroundColor = UIColor.blue
        btnTwo.backgroundColor = UIColor.blue
        btnThree.backgroundColor = UIColor.blue

        switch model {
            case .first:
                btnOne.backgroundColor = UIColor.red
            case .second:
                btnTwo.backgroundColor = UIColor.red
            case .third:
                btnThree.backgroundColor = UIColor.red
        }
    }

    @IBAction func optionSelectOne(_ sender: RoundButton!) {
        optionSelectDelegate?.onCellModelChange(cell: self, model: .first)
    }
    @IBAction func optionSelectTwo(_ sender: RoundButton!) {
        optionSelectDelegate?.onCellModelChange(cell: self, model: .second)
    }
    @IBAction func optionSelectThree(_ sender: RoundButton!) {
        optionSelectDelegate?.onCellModelChange(cell: self, model: .third)
    } 
}

import UIKit
import Firebase
import FirebaseFirestore

class ViewController: UIViewController {

    private var elements: [CellModel] = []

    @IBOutlet weak var tableView: UITableView!
    var labelSetup: [Labels] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        //▼ Cannot convert value of type 'ButtonSelectionIdentity' to expected argument type 'CellModel'
        elements.append(ButtonSelectionIdentity.first) // error one

        tableView.dataSource = self
        tableView.delegate = self

        fetchLabels { (labels) in
            self.labelSetup = labels.sorted(by: 
        self.tableView.reloadData()
    }

}
    func fetchLabels(_ completion: @escaping ([Labels]) -> Void) {
        let ref = Firestore.firestore().collection("labels")
        ref.addSnapshotListener { (snapshot, error) in
            guard error == nil, let snapshot = snapshot, !snapshot.isEmpty else {
                return
            }
        completion(snapshot.documents.compactMap( {Labels(dictionary: $0.data())} ))
        }
    }
}
extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return labelSetup.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? Cell else { return UITableViewCell() }

        cell.configure(withLabels: labelSetup[indexPath.row])

        cell.optionSelectDelegate = self
        let model = elements[indexPath.row]

        //▼ Cannot convert value of type 'CellModel' to expected argument type 'ButtonSelectionIdentity'
        cell.update (with: CellModel) //error 2

        return cell
    }

}

extension ViewController: OptionSelectDelegate {
    func onCellModelChange(cell: Cell, model: ButtonSelectionIdentity) {
        guard let indexPath = productListTableView.indexPath(for: cell) else {
            return
        }
        let index = indexPath.row
        elements[index] = model

        //▼ Cannot assign value of type 'ButtonSelectionIdentity' to type 'CellModel'
        cell.update(with: model) //error 3
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...