首页 > 解决方案 > 是否可以为 UIContextualAction 对象的图像着色?

问题描述

我正在尝试使用委托方法在 UITableView 上创建自定义删除操作:tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?

我设置了一个透明的背景颜色和一个图标。无论我尝试什么,我都无法为图像着色。这可能吗?

@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

    let delete = UIContextualAction(style: .destructive, title: nil, handler: { contextualAction, view, _ in

        if self.inboxMessages.count > 0 {
            self.inboxMessages[indexPath.row].delete(onCompletion: {success in

                if success{

                    NSLog("Message deleted successfully!")

                    if self.inboxMessages.indices.contains(indexPath.row) {
                        self.inboxMessages.remove(at: indexPath.row)
                    }

                    DispatchQueue.main.sync {

                        if indexPath.row != 0 {
                            self.tableView.deleteRows(at: [indexPath], with: .fade)
                        }

                        self.tableView.reloadData()
                    }
                }
            })
        }
    })

    delete.image = UIImage(named: "deleteInboxIcon")?.withRenderingMode(.alwaysTemplate).tint(with: .red)

    let color = UIColor(white: 0, alpha: 0.000001)
    delete.backgroundColor = color
    //        delete.backgroundColor = UIColor(patternImage: UIImage(named: "DefaultInboxIcon")!)

    let actionsConfig = UISwipeActionsConfiguration(actions: [delete])
    actionsConfig.performsFirstActionWithFullSwipe = true

    return actionsConfig
}

这是我到目前为止设法实现的目标:

这就是我到目前为止所取得的成就

编辑:该tint(with:)功能来自 CosmicMind/Material 吊舱

extension UIImage {

   open func tint(with color: UIColor) -> UIImage? {

       UIGraphicsBeginImageContextWithOptions(size, false, Screen.scale)

       guard let context = UIGraphicsGetCurrentContext() else {
          return nil
       }

       context.scaleBy(x: 1.0, y: -1.0)
       context.translateBy(x: 0.0, y: -size.height)

       context.setBlendMode(.multiply)

       let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
       context.clip(to: rect, mask: cgImage!)
       color.setFill()
       context.fill(rect)

       let image = UIGraphicsGetImageFromCurrentImageContext()
       UIGraphicsEndImageContext()
       return image?.withRenderingMode(.alwaysOriginal)
   }
}

标签: iosswiftuitableviewuikit

解决方案


推荐阅读