Добрый день!
Есть xib ячейка, которая инициализируется в классе NewPlaceTableViewController, ячейка имеет внутри себя UIStackView, со своим классом RatingControl, в котором присутствует реализация кастомного рейтинга,
@IBDesignable class RatingControl: UIStackView, RatingProtocol {
// MARK: - Preperties var rating = 0 { didSet { updateButtonSelectionState() } } private var ratingButtons = [UIButton]() @IBInspectable var startSize: CGSize = CGSize(width: 44.0, height: 44.0) { didSet { setupView() } } @IBInspectable var startCount: Int = 5 { didSet { setupView() } } // MARK: - Initialization override init(frame: CGRect) { super.init(frame: frame) setupView() } required init(coder: NSCoder) { super.init(coder: coder) setupView() } // MARK: - Button Action @objc func ratingButtonAction(button: UIButton) { guard let index = ratingButtons.firstIndex(of: button) else { return } let selectedRating = index + 1 if selectedRating == rating { rating = 0 } else { rating = selectedRating } print("rating \(rating)") } // MARK: - Private Methods private func setupView() { for button in ratingButtons { removeArrangedSubview(button) button.removeFromSuperview() } ratingButtons.removeAll() let bundle = Bundle(for: type(of: self)) let emptyStar = UIImage(named: "emptyStar", in: bundle, compatibleWith: self.traitCollection) let filledStar = UIImage(named: "filledStar", in: bundle, compatibleWith: self.traitCollection) let highlithedStar = UIImage(named: "highlithedStar", in: bundle, compatibleWith: self.traitCollection) for _ in 0..<startCount { let button = UIButton() button.setImage(emptyStar, for: .normal) button.setImage(filledStar, for: .selected) button.setImage(highlithedStar, for: .highlighted) button.setImage(highlithedStar, for: [.highlighted, .selected]) button.setSize(width: startSize.width, height: startSize.height) button.addTarget(self, action: #selector(ratingButtonAction), for: .touchUpInside) addArrangedSubview(button) ratingButtons.append(button) } updateButtonSelectionState() } private func updateButtonSelectionState() { for (index, button) in ratingButtons.enumerated() { button.isSelected = index < rating } }
}
В классе NewPlaceTableViewController я пытаюсь через созданное свойство
var ratingControl: RatingControl = {
let rating = RatingControl()
return rating
}()
отловить значение свойства rating из RatingControl в ячейке, присвоив
ratingControl.rating = cell.ratingControl.rating
Далее при нажатии на определенную кнопку записывается в модель
let newPlace = FavoritePlace(name: placeNameTextField.text!, location: placeLocationTextField.text, type: placeTypeTextField.text, imageData: imageData, rating: ratingControl.rating)
свойство ratingControl.rating в модель попадает значение 0, так как я просто перехватил начальную инициализацию свойства, пробовал делегатами отлавливать и синглетоном напрямую обращаться к свойству rating в RatingControl, но безуспешно, как я могу решить эту проблему?