在 iOS 中实现收藏按钮

Posted

技术标签:

【中文标题】在 iOS 中实现收藏按钮【英文标题】:Implementing a favorite button in iOS 【发布时间】:2018-11-04 02:09:09 【问题描述】:

我正在尝试在应用程序中实现一个收藏按钮,这是我的尝试。这是我目前拥有的:

let favoriteButton: UIButton = 
    let button = UIButton(type: .custom)
    var emptyHeartImg = UIImage(named: "emptyheart")
    var fullHeartImg = UIImage(named: "fullheart")
    emptyHeartImg = emptyHeartImg?.maskWithColor(color: UIColor(r: 128, g: 171, b: 103))
    fullHeartImg = fullHeartImg?.maskWithColor(color: UIColor(r: 128, g: 171, b: 103))
    let imageView = UIImageView(image: emptyHeartImg, highlightedImage: fullHeartImg)
    imageView.contentMode = .scaleAspectFill
    button.setImage(imageView.image, for: .normal)
    button.addTarget(self, action: #selector(handleFavorite), for: .touchUpInside)
    return button
()

@objc private func handleFavorite() 
    if (favoriteButton.imageView?.isHighlighted)! == false 
        favoriteButton.imageView?.isHighlighted = true
     else 
        favoriteButton.imageView?.isHighlighted = false
    

目前这不会根据需要更改图像。实现收藏按钮的任何提示或替代方法?

【问题讨论】:

【参考方案1】:

我会使用UIButton.isSelected 而不是 imageView 的高亮状态。我不确定UIImageView,但按钮的isHighlighted 仅在它们被主动触摸时,而不是持久状态。请参阅标有 ​​* 的行:

let favoriteButton: UIButton = 
    let button = UIButton(type: .custom)
    var emptyHeartImg = UIImage(named: "emptyheart")
    var fullHeartImg = UIImage(named: "fullheart")
    emptyHeartImg = emptyHeartImg?.maskWithColor(color: UIColor(r: 128, g: 171, b: 103))
    fullHeartImg = fullHeartImg?.maskWithColor(color: UIColor(r: 128, g: 171, b: 103))
    **button.setImage(emptyHeartImg, for: .normal)
    **button.setImage(fullHeartImg, for: .selected)
    **button.imageView?.contentMode = .scaleAspectFill
    button.addTarget(self, action: #selector(handleFavorite), for: .touchUpInside)
    return button
()

然后在你的处理程序中:

favoriteButton.isSelected = !favoriteButton.isSelected

【讨论】:

以上是关于在 iOS 中实现收藏按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中实现收藏夹或点赞按钮

C#中回车出发事件(+收藏)

如何在android中实现视图滑动

在Windows 10应用程序中实现树视图

iOS 简单音乐播放器 界面搭建

Twitter API - 获取收藏状态的用户列表