프로토콜로 데이터 전달하기

sun02·2021년 7월 20일
0

iOS

목록 보기
2/27

프로토콜을 사용하여 viewcontroller간 데이터 전달하기

데이터를 전달할 때 보통은 segue를 사용하는데 viewcontroller간 segue로 연결되어 있지 않은 경우는 어떻게 해야 할까?

1. protocol 생성하기

  • 보낼 데이터가 있는 뷰 컨트롤러의 클래스 바깥에 프로토콜을 생성해 준다
protocol SendDataDelegate {
   func sendData(data : 데이터타입) 
}

class SendViewController : UIViewController {
   var delegate : SendDataDelegate?
}

2. 데이터 보내기

  • SendViewController에 데이터 보내기 함수 작성
class SendViewController : UIViewController {
   var delegate : SendDataDelegate?

   func sendfunction() {
        delegate?.sendData(Data:보낼데이터)
   }
}

3. SendDataDelegate 채택하고 sendData 구현

  • 데이터 받을 viewcontroller에 작성
class GetViewController : UIViewcontroller, SendDataDelegate {
func sendData(Data : ) {
         ///받은 데이터 Getviewcontroller상에 구현하는 코드
    }
}

4. delegate 위임

  • SendViewController의 Delegate를 GetViewcontroller로 위임해 줘야 함
@IBAction func stickerBtnClicked(_ sender: UIBarButtonItem) {
        // 바텀 시트로 쓰일 뷰컨트롤러 생성
        let vc = storyboard?.instantiateViewController(withIdentifier: "PutStickerViewController") as! PutStickerViewController
        vc.delegate = self 
                
        // MDC 바텀 시트로 설정
        let bottomSheet: MDCBottomSheetController = MDCBottomSheetController(contentViewController: vc)
        bottomSheet.mdc_bottomSheetPresentationController?.preferredSheetHeight = 300
    
        // 보여주기
        present(bottomSheet, animated: true, completion: nil)
    }

저는 바텀시트를 사용할 때 이 데이터 전달 방식을 사용했기 때문에
위 코드와 같이 vc.delegate = self 작성하여 대리자 위임을 해주었습니다.

여기선 바텀시트가 SendViewController, PutStickerViewController가 GetViewController입니다.

0개의 댓글