我有一个tableview动态原型自定义tableview单元。 我的tableview单元格颜色是白色,并且tableview的背景也是白色。 我想向右滑动删除tableviewcell的功能,并使用自定义tableviewrowaction 我已经在我的应用程序中使用自定义tableviewrowaction实现了相同的效果,效果很好,但是唯一的问题是当我向右滑动单元格反弹时,单元格后面有灰色背景色。我已经删除了backgroundview,更改了单元格和tableview的颜色,但是当我滑动单元格时,仍然可以看到灰色的背景色。 以下是编写显示自定义tableview删除行操作的代码
public func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let deleteAction = UITableViewRowAction(style: .default, title: "") { (action, indexPath) in
let cell = self.tableview.cellForRow(at: indexPath) as? CardInfoSwipeCell
cell?.deleteAction(action)
}
deleteAction.setIcon(iconImage: UIImage(named: "delete")!, backColor: UIColor.white, cellHeight: 100.0, iconSizePercentage: 0.79)
return [deleteAction]
}
以下是在tableviewrowaction上设置图像的代码
extension UITableViewRowAction {
func setIcon(iconImage: UIImage, backColor: UIColor, cellHeight: CGFloat, iconSizePercentage: CGFloat)
{
let iconHeight = cellHeight * iconSizePercentage
let margin = (cellHeight - iconHeight) / 2 as CGFloat
UIGraphicsBeginImageContextWithOptions(CGSize(width: cellHeight, height: cellHeight), false, 0)
let context = UIGraphicsGetCurrentContext()
backColor.setFill()
context!.fill(CGRect(x:0, y:0, width:cellHeight, height:cellHeight))
iconImage.draw(in: CGRect(x: 0, y: margin, width: iconHeight - 10, height: iconHeight - 4))
let actionImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.backgroundColor = UIColor.init(patternImage: actionImage!)
}
}
有什么方法可以禁用tableview的拖动弹跳,以免将其拖动到特定点之外。
答案 0 :(得分:1)
您可以使用此库https://github.com/SwipeCellKit/SwipeCellKit允许您将图标放置在UITableViewRowAction
上
[TableView]不再支持将图案颜色设置为UITableViewRowAction的backgroundColor。
答案 1 :(得分:0)
要禁用表格视图拖动弹跳,可以使用以下方法-
@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let delete = UIContextualAction(style: .destructive, title: "Delete") { (action, sourceView, completionHandler) in
// Code to perform delete action
completionHandler(true);
}
let swipeAction = UISwipeActionsConfiguration(actions:[delete])
swipeAction.performsFirstActionWithFullSwipe = false // This is the line which disables full swipe
return swipeAction
}
答案 2 :(得分:0)
我尝试将背景色设置为.clear
,但这没有用。这种解决方法可以完成工作。
action.backgroundColor = UIColor(white: 1, alpha: 0.001)