티스토리 뷰

여러 블로그를 보아도

 

부모 뷰 -> 자식 뷰로 뷰 전환이 일어날 때 클래스 내에 override func prepare()를 활용해 데이터를 전달하는 방법만 있지,

자식 뷰에서 부모 뷰로 다시 데이터를 받는 방법을 찾긴 어렵더군요.

 

대리자를 활용하여 데이터를 전달하면 되는데, 저도 초보 수준이라 구현이 쉽지 않았습니다. 해당 기능을 구현하는 데에 저 포함 여러 초보 개발자분들이 고생하실 것 같아서 한 번 작성해 봅니다.

 

먼저 prepare()와 segue 방식을 이용하여 부모 뷰에서 자식 뷰로 데이터를 전달하는 것 까지 구현이 완료된 기점부터 설명하니 이점 참고해주시길 바랍니다.

 

(제가 설명하는 예시에서 homeVC는 부모 뷰를, bookMarkVC는 자식 뷰를 의미하고, 전달하는 데이터 형식은 문자열 배열(부모 뷰의 배열은 saveList, 자식 뷰의 배열은 quoteList) 임을 참고해주세요.)

 

 

 

 

 

1. 자식 뷰에서 프로토콜을 정의해줍니다. 메소드 이름과 전달할 데이터는 원하시는 데로 바꿔주시면 돼요.

protocol bookMarkVCDelegate : NSObjectProtocol {
    func dataPassToPreviousVC(data: [String])
}

 

 

 

 

 

2. 자식 뷰의 클래스 내에 대리자를 변수 선언해주세요.

class bookMarkVC: UIViewController {
    weak var delegate : bookMarkVCDelegate?
}

 

 

 

 

 

3. 부모 뷰에 해당 델리게이트를 채택해주시고 데이터를 받아와서 어떻게 처리할지 세부 기능을 구현해주세요.

class homeVC: UIViewController, bookMarkVCDelegate {
    func dataPassToPreviousVC(data: [String]) {
        saveList = data
        UserDefaults.standard.set(saveList, forKey: "saveList")
    }
}

저와 같은 경우에는 받아온 문자열 배열을 saveList라는 빈 배열에 할당시켜주고 바로 저장해주는 메서드를 구현했어요. 가장 기본적인 방법입니다.

 

 

 

 

 

4. 마지막으로

데이터를 받아서 어떻게 처리할지는 해결했는데... 데이터를 아직 자식 뷰에서 부모 뷰로 넘기는 것을 해결하지 못했습니다.

if let delegate = self?.delegate{
                delegate.dataPassToPreviousVC(data: self?.quoteList ?? [])
            }

자식 뷰에 원하는 시점에서 해당 코드를 작성해주세요. 앱이 로드되었을 때나, 어떤 버튼을 눌렀을 때 구현이 되도록 하면 좋겠죠?

 

 

 

 

 

자! 우리는 dataPassToPreviousVC()라는 함수를 통해 자식 뷰 내에 quotoList의 배열 데이터를 넘겨준 것을 볼 수 있어요. 그럼 3번에서 작성한 대로 이 quoteList의 배열 데이터는 부모 뷰의 saveList로 쏙 들어가는 것을 확인해 볼 수 있습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함