Как избежать изменения цвета оттенка кнопки при представлении всплывающего окна в iOS?

У меня есть кнопка, которая показывает всплывающее окно в полноэкранном режиме, основной вид имеет 6 настраиваемых представлений, которые имеют 5 кнопок с оттенком серого или синего цвета, в зависимости от некоторого параметра. но когда появляется всплывающее окно, кнопка внутри пользовательского представления становится серой, как только это всплывающее окно исчезает, пользовательское представление получает цвет оттенка, я хочу избежать этого, когда всплывающее окно представлено, оттенок кнопки не меняется. пользовательское представление — это представление внутри UITableviewCell. пользовательский вид определяется как это.

 class ratingDoors: UIView {
    var rating: Int = 0{
        didSet{
            makeRating()
        }
    }

    @IBOutlet var contentView: UIView!
    @IBOutlet weak var button1: UIButton!
    @IBOutlet weak var button2: UIButton!
    @IBOutlet weak var button3: UIButton!
    @IBOutlet weak var button4: UIButton!
    @IBOutlet weak var button5: UIButton!

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
        //fatalError("init(coder:) has not been implemented")
    }
    private func commonInit() {
        //TODO: Do some stuff
        // 1. Load the nib
        Bundle.main.loadNibNamed("ratingDoors", owner: self, options: nil)

        // 2. Add the 'contentView' to self
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight,.flexibleWidth]
    }

    @IBAction func setRating(sender: UIButton){
        rating = sender.tag
        //makeRating()
    }
    func makeRating() {
        button1.configureRatingButton(i: rating)
        button2.configureRatingButton(i: rating)
        button3.configureRatingButton(i: rating)
        button4.configureRatingButton(i: rating)
        button5.configureRatingButton(i: rating)
    }
    }

    extension UIButton{
        func configureRatingButton(i: Int){
            if self.tag <= i {
                self.tintColor = UIColor(red: 90/255, green: 212/255, blue: 227/255, alpha: 1.0)
            }else{
                self.tintColor = UIColor(red: 204/255, green: 204/255, blue: 204/255, alpha: 1)
            }
        }
    }

в таблице у меня есть эта настройка для ячейки

let cell = tableView.dequeueReusableCell(withIdentifier: "ratingCell") as! ratingTableViewCell
        cell.ratingLabel.text = "Ordenado"
            if let ordered = requestManager.instance.user.ordered{
                cell.ratingView.rating = ordered
            }

        return cell

и так для всех 6 строк с одинаковым видом. вот подготовка (для:)

let popoverVC = segue.destination as! popoverViewController
        popoverVC.delegate = self
        popoverVC.modalPresentationStyle = UIModalPresentationStyle.popover
        popoverVC.popoverPresentationController!.delegate = self

начальная конфигурация для tview такая. начальное состояние просмотра

Вот вид с представленным всплывающим окном. «кнопки так как же избежать изменения цвета оттенка в представлении всплывающего окна?


person Yoel Jimenez del valle    schedule 10.01.2019    source источник
comment
Отладьте свой метод cellForRowAt, чтобы увидеть, почему рейтинги становятся нулевыми.   -  person Mocha    schedule 11.01.2019


Ответы (1)


Если вы установите для каждой кнопки tintAdjustmentMode значение .normal, они не будут менять свой оттенок при представлении всплывающего окна. Другим вариантом может быть использование пользовательского типа кнопки (вместо системного), который не реагирует на изменения оттенка.

person Jordan H    schedule 13.01.2019
comment
я попробую, чтобы увидеть, что произошло. - person Yoel Jimenez del valle; 14.01.2019
comment
Решил мою проблему! Спасибо!! - person PlateReverb; 12.07.2019
comment
Это решение также работает при представлении UIAlertController. Как ни странно, tintAdjustmentMode кнопки уже имеет значение .normal, но установка его в .normal после инициализации должна сделать что-то дополнительное в наблюдателе свойств didSet. - person danfordham; 24.08.2020
comment
Настройка tintAdjustmentMode работает, но просто использование пользовательского типа кнопки не работает. - person rmp; 09.02.2021