とってもニッチな記事です![]()
参考にする人は少なそうですが、せっかく仕事で触ったのでまとめておきます![]()
UITableViewCellEditControl, UITableViewCellReorderControlとは
UITableViewで編集モードになったときに、左右に出てくる部品のことです。

編集モード?削除?並び替え?って感じの人はこちらの記事を見ると理解できるかと思います。
http://himaratsu.hatenablog.com/entry/tableview/editmode
画像を変更する
この方法はUITableViewの編集モードで複数選択が可能な場合にのみ正常に動作します![]()
![]()
tableView.allowsMultipleSelectionDuringEditing = trueを前提としています![]()
Debug View Hierarchyで見るとクラス名を知ることはできますが、コードからはこれらのクラス名を使うことはできません。

どうやらUITableViewCellの直下にいるらしいので、subviewsで探せそうです。それぞれUIImageViewを持っていることもわかります。
UITableViewCellのサブクラスを作って、UITableViewCellEditControlとUITableViewCellReorderControlが持っているUIImageViewに画像をセットする処理を書きます。
final class UITableViewCustomCell: UITableViewCell {
private func setEditControlImage() {
// UITableViewCellEditControlが持つimageViewを取得
let imageView = subviews.first { $0.description.contains("Edit") }?.subviews.first { $0 is UIImageView } as? UIImageView
// セルの選択状態に応じて適当な画像をセット
imageView?.image = isSelected ? #imageLiteral(resourceName: "thunder_black") : #imageLiteral(resourceName: "thunder_white")
}
private func setReorderControlImage() {
// UITableViewCellReorderControlが持つimageViewを取得
let imageView = subviews.first { $0.description.contains("Reorder") }?.subviews.first { $0 is UIImageView } as? UIImageView
// 適当な画像をセット
imageView?.image = #imageLiteral(resourceName: "swastika")
// そのままだと横長の画像になってしまうのでモード変更
imageView?.contentMode = .scaleAspectFit
}
}
後は適当なタイミングで画像をセットする処理を呼び出します。
extension UITableViewCustomCell {
// セルがハイライトされた
override func setHighlighted(_ highlighted: Bool, animated: Bool) {
super.setHighlighted(highlighted, animated: animated)
setEditControlImage()
}
// セルが選択された
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
setEditControlImage()
}
// セルの編集モードが変更された
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
setEditControlImage()
setReorderControlImage()
}
}
編集モードで複数選択以外にすると画像が戻ってしまう状況がある
編集モードで複数選択以外にすると、UITableViewCellEditControlをタップするか、並び替えをすると、UITableViewCellEditControlの画像がデフォルトのものに戻ってしまいます。
仕事では複数選択のときのみ考えればよかったので深く追いませんでしたが、どうすればうまくいくんでしょうか??

おわりに
割と無理やり標準部品の画像を変更してみました![]()
こういうのをやると、いつもプロパティ用意しておいてほしいなと思います![]()
OSのバージョンアップなどで使えなくなる可能性は十分にあるので、カスタムセルのビューでやるほうが無難かと思いますが、もしよければ使ってみてください!![]()
