[UiKit] UIControl과 특정 action을 연결하는 addTarget을 알아보자 !

eung7_·2022년 2월 15일
1

iOS

목록 보기
9/17
post-thumbnail

addTarget 이 뭐야?

addTarget은 UIControl 클래스 안에 있는 인스턴스 메서드이다. 주로 UIButton, UITextField와 같이 사용자가 직접 Control을 할 수 있는 객체에 접근하여 특정 이벤트가 발생할 때 마다 내가 작성한 메서드를 동작하도록 만들 수 있는 아주 유용한 메서드이다. 그럼 본격적으로 알아보자.


선언

func addTarget(_ target: Any?, 
        action: Selector, 
           for controlEvents: UIControl.Event)

addTarget의 파라미터는 세 가지가 있다. target, action, controlEvents이다. 이름에서 어느정도 유추할 수 있을 것 같다. 그럼 하나씩 살펴보자.

target

내가 설정한 action 메서드가 호출되는 객체를 설정하는 파라미터다. 즉, action파라미터에 설정한 메서드가 호출되는 개체라고 생각하면 된다. addTarget을 정의하면 UIControl를 갖고 있는 상위 View를 특정하기 때문에, 보통의 경우는 self로 둔다.

action

#selector()를 이용하여 ControlEvents의 설정한 이벤트가 발생할 때마다 동작하는 메서드를 선택해주어야 하는 파라미터이다.

controlEvents

어떤 이벤트가 발생할 때 마다 선택한 메서드를 실행시킬 것인지 지정해주는 파라미터다. 이 파라미터는 UIControl.Event라는 상수 목록들을 지정하고 있다. 다양한 이벤트들은 여기서 확인할 수 있다.


마지막으로 예시를 든 소스코드를 참고 해주셨으면 좋겠다.

let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(fetchData), for: .valueChanged)
    
    @objc private func fetchData() {
        
        let stationName = station.stationName
        let urlString = "http://swopenapi.seoul.go.kr/api/subway/sample/json/realtimeStationArrival/0/5/\(stationName.replacingOccurrences(of: "역", with: ""))"
        AF
            .request(urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "")
            .responseDecodable(of: StationArrivalDataResponseModel.self) { [weak self] response in
                guard let self = self else { return }
                self.refreshControl.endRefreshing()
                guard case .success(let data) = response.result else { return }
                
                self.realTimeArrivalList = data.realTimeArrivalList
                self.collectionView.reloadData()
                print(data.realTimeArrivalList)
            }
            .resume()
    }
profile
안녕하세요. SW Engineer eung7입니다.

0개의 댓글