이 글은 뇌피셜을 기반으로 합니다.
cell에게 이벤트 주는 요소를 두 가지정도로 나누면
UIControl의 서브클래스,
UIControl을 상속하지 않는 UIView로 나눌 수 있을 것 같습니다.
나누는 기준에 대해 말씀드리면 UIControl의 서브클래스들은 cell에 넣었을 때 클릭이 잘 되는 설정이 따로 되어있는건지는 모르겠지만,
cell 자체에 넣어도 지금 말하려는 문제가 생기지 않습니다.
문제는 후자인데, cell에 contentView 라는 서브뷰가 있습니다.
그리고 이 서브뷰는 isUserInteractionEnabled가 true로 설정되어있어요.
또한 후자의 뷰에게 이벤트를 주려면
let iv = UIView() let tap = UITapGestureRecognizer(target: , action: #selector()) iv.isUserInteractionEnabled = true iv.addGestureRecognizer(tap)
addGestureRecognizer를 이용해야 하는데, 이 과정에서도 isUserInteractionEnabled를 true로 설정해야해요.
이렇게 넣은 뷰를 cell 자체에 넣으면, 셀을 클릭했을 때 contentView가 반응하고 우리가 넣은 뷰에서는 이벤트가 안생기는것같아요.
때문에 해결법은 저 두가지 정도 되는것같습니다.
contentView의 isUserInteractionEnabled를 false로 설정해서, 우리가 넣은 뷰에서 이벤트를 발생시키거나,
contentView.isUserInteractionEnabled = false
contentView 에 뷰를 넣어버려요
contentView.addSubview(iv)
그리고 후자의 방법이 권장되는듯 합니다.