본문 바로가기

iOS

[iOS] UITableView의 ReorderControl 이미지 변경하기


UITableView의 편집 모드에서 editingAccessory의 default 이미지를 다른 이미지로 변경해야 했습니다.

처음에는 아래 코드처럼 하면 될 것 같았는데, 원하는대로 이미지만 바뀌지 않았어요..
기본 이미지가 있는채로 옆에 새로 이미지가 생성되어 들어가게 되더라구요..!

 

cell.editingAccessoryView = '원하는 이미지뷰'

 

 

이외에도 여러가지 시도를 해봤지만 어려웠어요..ㅎ..

 

결과적으로, 해결한 방법은

willDisplay 함수에서

cell의 subview에서 "UITableViewCellReorderControl"을 찾아 이미지뷰를 변경했습니다.

 

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
	let imageView = cell.subviews.first(where: { $0.description.contains("Reorder") })?.subviews.first(where: { $0 is UIImageView }) as? UIImageView
        
	imageView?.image = UIImage(named: "commonBtnListHandle")
        
	let size = cell.bounds.height * 0.375
	imageView?.frame.size.width = size
	imageView?.frame.size.height = size
}

 

 

cell의 subviews를 출력하면 아래와 같이 나옵니다.

 

 


 

추가적으로 editingAccessory는 보여야 하는데, editing은 되지 않아야 하는 상태 설정이 있었습니다.

 

isEditing = false를 하거나 setEditing(false, animated: false)를 하면 editingAccessory가 아예 보이지 않게 됩니다.

 

초기에 모든 셀이 editing이 되도록 한 후,

특정 셀에 조건을 주어 'showsReorderControl = true' 면서 'isUserInteractionEnabled = false'로 하였습니다.

따라서, editingAccessory는 보이면서, 사용자가 셀 편집은 할 수 없는 상태로 설정할 수 있습니다.

 

cell.showsReorderControl = true
cell.isUserInteractionEnabled = false