Я столкнулся с той же проблемой, я хочу изменить значок любимой кнопки в соответствии со статусом. Мое решение создать две разные кнопки. В соответствии со статусом, изменение кода 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]
}