-
TableViewCell 내부의 UIView에서 Gesture로 이벤트 처리하기iOS/Swift 2022. 1. 22. 20:42
안녕하세요!! 이번엔 테이블 뷰 셀 안에서 UIView를 클릭했을 때 이벤트를 처리하는 방법을 정리했습니다.
이번 글도 노션에서 옮겨와 말이 짧습니다!! 양해해주세용😽
저번에는 Delegate 패턴을 사용하여 TableViewCell 내부의 UIButton에 대한 이벤트를 처리했었다.
Delegate 패턴을 이용하여 TableViewCell 내부의 버튼 이벤트 처리하기
안녕하세요!! 이번엔 Delegate 패턴을 이용해서 TableViewCell의 버튼 이벤트를 처리하는 방법을 정리했습니다. 이번 글도 노션에서 옮겨와 말이 짧습니다!! 양해해주세용😽 Delegate 패턴이란? Deleg
makemakeway.tistory.com
그런데 UIView에는 UIButton의 addTarget처럼 이벤트를 처리할 수 있는 방법이 없는 것 같았다.😢
그래서 이것저것 방법을 찾아보다가, Gesture를 통해 이벤트를 처리할 수 있는 방법을 알게 되었다.
위 이미지에서 비슷한 컨텐츠 보기 부분을 footerView라 이름을 붙였다.
테이블 뷰 셀을 클릭하면 movieDetailView로 이동해야 하지만, footerView를 클릭하면 similarContentView로 이동할 수 있도록 로직을 짰다.
UIView에는 UIButton에 있는 addTarget같이 이벤트를 처리할 수 있는 메소드가 없는 것으로 알고있다.
그래서, gesture를 통해서 이벤트를 처리해야겠다고 생각했다.
먼저, similarContentView에 데이터를 전달해줄 방법이 필요했다.
Gesture를 커스텀해서 데이터를 전달할 수 있다는 것을 알게됐고, 커스텀 제스쳐를 만들어줬다.
class CustomGesture: UITapGestureRecognizer { var mediaType: String? var id: Int? var index: Int? }
그리고, 커스텀 제스쳐를 통해 실행해줄 함수를 작성했다.
@objc func similarContentsViewTapped(_ gesture: CustomGesture) { let sb = UIStoryboard.init(name: "SimilarContentsViewControllerStoryboard", bundle: nil) let vc = sb.instantiateViewController(withIdentifier: "SimilarContentsViewController") as! SimilarContentsViewController vc.id = gesture.id! vc.mediaType = gesture.mediaType! self.navigationController?.pushViewController(vc, animated: true) }
그리고 테이블 뷰의 델리게이트 메소드인 cellForRowAt에서 각 셀의 footerView에 맞게 제스쳐를 추가해주었다.
let gesture = CustomGesture(target: self, action: #selector(self.similarContentsViewTapped(_:))) gesture.id = movieData.id gesture.mediaType = movieData.media_type gesture.index = indexPath.row cell.footerView.addGestureRecognizer(gesture)
그리고 앱을 실행시켜서 확인해보면, 원하는 대로 이벤트가 처리되는 것을 확인할 수 있다!😃
실행화면
셀을 눌렀을 때에는 배우 정보가 나오지만, 비슷한 컨텐츠 보기를 눌렀을 때에는 같은 장르의 영화들이 나온다. 'iOS > Swift' 카테고리의 다른 글
앱에 데이터 백업, 복구 기능 추가하기(Swift) (0) 2022.01.22 Realm-cocoa 라이브러리 활용해보기(Swift) (0) 2022.01.22 Swift SocketIO를 활용한 실시간 채팅 앱 구현 (0) 2022.01.15 Swift Localization 처리하기(로컬라이징, 현지화) (0) 2022.01.14 Swift 위치정보를 받아서 행정구역 단위로 나타내기(역 지오코딩, reverse geocoding) (0) 2022.01.13