2022. 9. 1. 02:07ㆍiOS/UIKit
테이블뷰 클릭이벤트만들기 (참고)
테이블뷰셀에 있는 버튼 클릭이벤트 만들기
테이블뷰셀파일에서 IBAction을 만들어준다
셀을 클릭하면 뷰컨트롤러에서 설정해준 셀클릭이벤트 함수가 호출되고
버튼을 클릭하면 테이블뷰셀에서 설정해준 IBAction 함수가 호출된다.
하지만 버튼을 클릭해도 뷰컨틀롤러에서는 버튼일 클릭되었는 지 알 수가 없다. 이를 델리게이트로 연결해보자!
지금 내가 하고 싶은 일은
테이블뷰셀에서 이벤트가 발생했을 때 뷰컨트롤러에서 알게 하는 것이다.
1. 연결시켜줄 프로토콜을 만든다
파일을 생성하여 프로토콜 파일을 만들어준다.
2. 테이블뷰가 있는 뷰컨트롤러에서 프로토콜을 연결시킨다
프로토콜을 추가해주면 함수를 정의하라는 오류 메시지가 나온다. fix버튼을 클릭하면
정의부가 나온다.
함수를 정의해준다.
테이블뷰셀안에 버튼이 있기때문에 나의 프로토콜은 테이블뷰셀을 선언해주는 곳에서 셀프로토콜과 연결시켜준다.
여기까지가 이제 이벤트를 발생했을 때 받을 준비가 된 것이다.
이제 테이블뷰셀과 연결을 시켜줘야한다.
3. 버튼이 있는 테이블뷰셀과 연결시킨다
프로토콜을 옵셔널타입으로 선언해준다
버튼이 클릭될 때 이벤트를 발생시켜준다!
실행
셀을 클릭하게 되면
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//테이블뷰의 이벤트처리 함수
print("테이블뷰 셀이 클릭 되었다!")
}
뷰컨트롤러에 있는 이 함수가 실행되고
테이블뷰 셀의 버튼을 클릭하게 되면
@IBAction func btnAction(_ sender: Any) {
print("테이블뷰셀에 있는 버튼이 클릭되었따.")
myprotocol?.myTableViewCellBtnAction()
}
테이블뷰셀 파일에 있는 프린트가 실행되고
//델리게이트 메소드
func myTableViewCellBtnAction() {
print("뷰컨트롤러에서 버튼이 클릭되었다.")
}
프로토콜로 연결된 델리게이트 메소드가 호출이 된다. (뷰컨트롤러에 있는 함수 -테이블뷰가 선언되어 있는 뷰컨트롤러)
정리
B에서 이벤트가 발생했을 때 A에게 알려주고 싶을 때!
1. 프로토콜을 만든다
protocol myProtocol {
func myTableViewCellBtnAction()
}
2. B에서 프로토콜 객체를 생성한다
var myprotocol : myProtocol?
3. B에서 이벤트가 발생하는 지점에서 함소를 호출시킨다
@IBAction func btnAction(_ sender: Any) {
print("테이블뷰셀에 있는 버튼이 클릭되었따.")
myprotocol?.myTableViewCellBtnAction()
}
4. A에서 프로토콜을 받는다
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, myProtocol
5. 함수를 구현해준다
(프로토콜을 상속받으면 자동으로 구현하라는 경고메시지가 뜬다. fix 버튼을 누르면 자동으로 생성)
func myTableViewCellBtnAction() {
print("뷰컨트롤러에서 버튼이 클릭되었다.")
}
6. 자기 자신과 연결시켜준다
cell.myprotocol = self
여기서 나는 테이블뷰셀과 연결을 시켰기때문에 UITableViewCell에 자기자신과 연결된다
ViewConroller와 연결시킬때는 뷰컨트롤러에서 자기자신과 연결시키면 된다
'iOS > UIKit' 카테고리의 다른 글
[UIKit] 버튼 클릭 후 사파리 URL 열기 (0) | 2022.09.16 |
---|---|
[UIKit] 뷰컨트롤러(ViewController) Dismiss 후 데이터 전달 -델리게이트 패턴 (0) | 2022.09.01 |
[UIKit] 카카오 (다음) 지도 API 마커추가하기 (0) | 2022.08.31 |
[UIKit] Snapkit(스냅킷) 테이블뷰셀 오토레이아웃 (라벨길이에 따른 가변적 높이 설정) (0) | 2022.08.25 |
[UIKit] SwiftUI Preview 맛보기 (0) | 2022.08.14 |