在UITableViewCell上单击UIImageView模板图像色调变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在UITableViewCell上单击UIImageView模板图像色调变化相关的知识,希望对你有一定的参考价值。

我正在尝试将模板图像添加到幻灯片菜单控制器(基于此SideMenuController component)。但我有一个色彩问题。原始图像是深灰色,我希望它们是白色的。我以编程方式设置了.alwaysTemplate模式和色调颜色,但是我得到的不是所需的行为:

enter image description here

即,当我点击该菜单项时,色调颜色从灰色变为白色。你知道怎么解决这个问题吗?

这是我用于导航菜单控制器的代码:

class NavigationMenuController: UITableViewController {

    @IBOutlet weak var groupsIcon: UIImageView!
    @IBOutlet weak var calendarIcon: UIImageView!
    @IBOutlet weak var documentsIcon: UIImageView!
    @IBOutlet weak var settingsIcon: UIImageView!

    private let gradientTop = UIColor.fromHexadecimal(0xF3736F)
    private let gradientBottom = UIColor.fromHexadecimal(0xEC92AE)
    private let cellSelection = UIColor.fromHexadecimal(0xEC92AE)
    private let menuIconTint = UIColor.fromHexadecimal(0xFFFFFF)

    private let segues = [
        "embedGroupsController",
        "embedCalendarController",
        "embedRulesController",
        "embedSettingsController"
    ]

    override func viewDidLoad() {
        super.viewDidLoad()

        let gradient = CAGradientLayer()
        gradient.colors = [gradientTop.cgColor, gradientBottom.cgColor]
        gradient.locations = [0.0, 1.0]
        gradient.frame = tableView.bounds

        let backgroundView = UIView(frame: tableView.bounds)
        backgroundView.layer.insertSublayer(gradient, at: 0)
        tableView.backgroundView = backgroundView

        let imageViews: [UIImageView] = [groupsIcon, calendarIcon, documentsIcon, settingsIcon]
        for imageView in imageViews {
            guard let image = imageView.image else { fatalError("Image not found") }
            let templateImage = image.withRenderingMode(.alwaysTemplate)
            imageView.image = templateImage
            imageView.tintColor = menuIconTint
        }
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = super.tableView(tableView, cellForRowAt: indexPath)
        let bgColorView = UIView()
        bgColorView.backgroundColor = cellSelection
        cell.selectionStyle = .default
        cell.backgroundColor = .clear
        cell.selectedBackgroundView = bgColorView
        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        guard let sideMenu = sideMenuController else {
            fatalError("Side menu controller is not configured")
        }
        if indexPath.row >= segues.count {
            fatalError("Unexpected row index: (indexPath.row)")
        }
        sideMenu.performSegue(withIdentifier: segues[indexPath.row], sender: nil)
    }

}

我也尝试通过Storyboard和Assets设置来完成它,但效果相同。我在ios 10和Swift 3上运行这个应用程序。

答案

我在细胞内有一个UIImageView色调的问题。

我通过将图像视图色调设置为默认并设置单元格的内容视图色调来修复它。

另一答案

好的,是的,@ Aakash和@HiteshAgarwal是对的,这是我问题的解决方案。我在cellForRowAt委托方法中设置了色调颜色,它变成了所需的颜色(虽然我仍然不知道为什么Storyboard方法失败以及为什么需要手动颜色设置):

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)
    let bgColorView = UIView()

    bgColorView.backgroundColor = cellSelection
    cell.selectionStyle = .default
    cell.backgroundColor = .clear
    cell.selectedBackgroundView = bgColorView

    if let imageView = getCellImageView(cell) {
        imageView.tintColor = UIColor.white
    }

    return cell
}

以上是关于在UITableViewCell上单击UIImageView模板图像色调变化的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中的 UITableViewCell 上添加带有单击事件的按钮?

在点击时全屏显示 UITableViewCell 中包含的 UIImageView 并带有动画

在UITableViewCell上单击UIImageView模板图像色调变化

自定义 UITableViewCell 按钮单击

swift:如何在单击按钮上对所有单元格进行 TTS

想要在单击相同的 UIButton 时从 UITableViewCell 更改正确的 UIButton 图像