본문 바로가기

Swift/Error & Issue

[iOS] TableView cell's UIImageView, UIButton object action event 실행 x | ContentView !!

 Notification 기능 개발을 하고 있었는데 Cell의 subview object들의 action event가 실행되지 않았습니다..

음..?

프로필(동그라미), 포스트(네모), 팔로우 버튼 광클 중..

"Combine을 써서 그런가?" 

 

 

 제 프로필 또한 UIImageView이고 getsture를 등록 했습니다. 원래는 버튼도 터치 이벤트가 먹히지 않았는데,, 계속 고민했고 머리에서 나온 한 가지 해결책이 떠올랐습니다.

bringSubviewToFront( )

 이 함수를 이용해 혹시나 덮여서 액션 response가 오지 않을 수도 있겠다고 생각했습니다. 프로필 이미지뷰, 포스트 이미지뷰, 팔로우 버튼 셋 다 bringSubviewToFront()를 통해 앞으로 꺼냈고 버튼은 다행히 반응이 잘 되는데 아직도 이미지들에 부착된 addTarget이 작동하지 않았습니다.

 삽질을 통해 알아낸 방법인데 init시점에 contentView.isUserInteractive = false로 하게 될 경우에 subview의 user interactive가 됩니다. 그런데 뭔가 찝찝하네요..

 

 기존에 cell에 인스턴스를 추가했던 코드입니다. (map이 루프 중에 가장 빠르다길래 한번 써봤습니다..)

 

 한가지 해결 방법은 contentView에 subview를 추가하는 것입니다.

 

 그래도 안된다면 의심 가는게 한 가지 있습니다. 해당 프로퍼티 추가할 때 클로저를 통해서 추가한다면 lazy 키워드를 사용해 특정 cell의 class 가 초기화 된 이후에 addTarget을 해줘야 합니다. 아직 init()가 호출되지 않은 상태에서 클래스 멤버변수 프로퍼티의 선언과 동시에 초기화를 할 때 @objc func 함수를 이용할 수 없기 때문에 init()가 끝난 후에 lazy 키워드를 통해 초기화를 해야 합니다.

 

 그래도 안된다면.. 아직까진 모르겠습니다.

 


 이 에러를 통해서 새롭게 개념을 알게 되네요. contentView는 cell에서 최상위 뷰를 담당합니다. additional subviews를 cell에 추가하할 땐 content view를 사용해야 한다고 정의되어 있습니다.(이제서야 알다니..)

 

 각 셀은 contentView(cell's superview)가 있습니다. contentView.addSubview() 로 subview들을 추가한다면 최상위 layer에 배치 됩니다.

 

Modern cell configuration을 자세히 공부해야겠습니다..