如图 右侧拖拽图标自定义操作
原理就是遍历去找出这个imageView,修改它。
方法1:代理方法内处理
// 改系统cell拖动图标
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if tableView.isEditing {
cell.subviews.forEach { view in
if view.className().range(of: "UITableViewCellReorderControl", options: .caseInsensitive) != nil {
view.subviews.forEach { subView in
if subView.className() == UIImageView().className() {
let imgView = subView as! UIImageView
imgView.image = UIImage(named: "list_icon_drag_20pt")
imgView.contentMode = .center
}
}
}
}
}
}
方法2:tableViewCell内处理
func customDragImgIcon() {
// UITableViewCellReorderControl
for view in subviews where view.description.contains("Reorder") {
for case let subview as UIImageView in view.subviews {
subview.image = UIImage(named: "list_icon_drag_20pt")
subview.contentMode = .center
}
}
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
customDragImgIcon()
}
iOS15系统发现,使用以上方法,开始拖动时图标会变回系统样式
开始在以下这两个方法去遍历修改,发现没效果
override func willTransition(to state: UITableViewCell.StateMask) {
super.willTransition(to: state)
}
override func didTransition(to state: UITableViewCell.StateMask) {
super.didTransition(to: state)
}
解决方法:tableViewcell layoutSubviews处理
override func layoutSubviews() {
super.layoutSubviews()
customDragImgIcon()
}