-
iOS [Swift] - UITapGestureRecognizer에 parameter(인자, 매개변수) 붙이고 싶을 때iOS Develop 2022. 7. 11. 11:10반응형
작업을 하다가 어쩌다보니 TapGesture에 Parameter를 넣어야 할 일이 생겼다.
그런데 이게 웬걸 당연하지만, 단순한 생각으로 넣어본 결과 역시나 안됐다.
좀 찾아보니 다음과 같은 방법으로 우회해서 사용할 수 있었다.
1. UITapGestureRecognizer를 상속받는 Class안에 필요한 Property를 생성한다. (parameter처럼 사용할)
2. 탭 제스처 인스턴스를 생성하고 탭 제스처 인스턴스를 통해 위에 만든 Property에 접근한다.
3. selector에 사용되는 메소드에는 1번에서 생성한 class를 sender로 받는다.
4. selector 메소드에서 sender를 통해 Property에 담긴 값들을 빼와서 처리한다. (필자의 경우 Delegate Pattern에 사용)
/// UITapGestureRecognizer를 상속받는 클래스 생성 class DayTapGesture: UITapGestureRecognizer { var dayNumber: String? var date: String? }/// DayTapGesture 인스턴스 생성 let dayTapGesture = DayTapGesture(target: self, action: #selector(tapOnDayCell(_:))) /// 제스처 추가 self.addGestureRecognizer(dayTapGesture) /// 인스턴스를 통해 값 지정 dayTapGesture.dayNumber = dayLabel.text dayTapGesture.date = currentDate.selectDateString() /// selector에 사용될 메소드 @objc func tapOnDayCell(_ sender: DayTapGesture) { guard let day = sender.dayNumber, let selectDate = sender.date, let weekString = weekString?.dayOfWeekWithOneLetter() else { return } /// 일 수가 10보다 적다면 앞에 0을 붙인다. let date = "\(selectDate) \(String(describing: Int(day)!))일 \(weekString)요일" self.monthDelegate?.checkSelectDate(date: date) }이렇게 하면 TapGesture에 사용될 Selector 메소드에 파라미터를 사용하는 것처럼 우회해서 이용할 수 있따.
이번 포스팅은 간단히 여기까지!! 감사합니동!!
'iOS Develop' 카테고리의 다른 글
iOS [SwiftUI] - @EnvironmentObject 사용하기 (0) 2022.09.28 iOS [Swift] - App Version 정리 (0) 2022.07.28 iOS [Swift] - 앱에서 라이트 & 다크 모드 설정하기 (0) 2022.06.24 iOS [Swift] - 시간 (시/분/초) "00:00:00" 형태로 만들기 (0) 2022.06.14 iOS [Swift] - UISegmentedControl Background Color 변경 (0) 2022.05.06