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

У меня есть настройка Button внутри функции в расширении UIViewController. Я установил два изображения для двух разных состояний. Но это не меняется при нажатии кнопки. Как я могу это исправить?

Я перепробовал все решения, представленные здесь.

import Foundation
import UIKit

extension UIViewController {

    func addSortAndWeatherButton(sortAction: Selector, weatherAction: Selector){

    let sortButton: UIButton = UIButton(type: UIButton.ButtonType.custom)

    sortButton.setImage(UIImage(named: "sort-near.png"), for: .normal)
    sortButton.setImage(UIImage(named: "sort-rating.png"), for: .selected)

    sortButton.addTarget(self, action: sortAction, for: .touchUpInside)
    sortButton.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
    let sortBarButton = UIBarButtonItem(customView: sortButton)

    self.navigationItem.rightBarButtonItems = sortBarButton
    }

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Я столкнулся с той же проблемой, я хочу изменить значок любимой кнопки в соответствии со статусом. Мое решение создать две разные кнопки. В соответствии со статусом, изменение кода custom view из UIBarButtonItem.

var isFavoriteButtonFilled = false

lazy var favoriteButton: UIButton = {
    let button = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
    button.setBackgroundImage(UIImage(named: "navHeart"), for: .normal)
    button.addTarget(self, action: #selector(favoriteUser), for: .touchUpInside)
    return button
}()

lazy var filledFavoriteButton: UIButton = {
    let button = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
    button.setBackgroundImage(UIImage(named: "navHeartFilled"), for: .normal)
    button.addTarget(self, action: #selector(favoriteUser), for: .touchUpInside)
    return button
}()

@objc private func favoriteUser() {

    let favoriteItem: UIBarButtonItem

    if isFavoriteButtonFilled {
        favoriteItem = UIBarButtonItem(customView: favoriteButton)
    } else {
        favoriteItem = UIBarButtonItem(customView: filledFavoriteButton)
    }

    isFavoriteButtonFilled.toggle()
    navigationItem.rightBarButtonItems = [favoriteItem]
}
0 голосов
/ 28 марта 2019

В вашем действии кнопки sortAction вам нужно установить кнопку в выбранное состояние. Что-то вроде:

sender.isSelected.toggle()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...