티스토리 뷰

 

Dev : Storyboard를 활용한 화면 전환 4가지 방법

* push는 navigation controller가 연결된 상태에서만 작동 * 1. segue로 push 전환 : 원래 화면에 있는 Button을 끌어다가 이동할 VC에 'Show'로 연결 뒤로가기 : 이동한 화면 속 Button에 해당 코드 작성 self.n..

dusanbaek.tistory.com

화면 전환을 하는 이유는 아무래도 화면 간에 데이터를 전달하기 위함이니까 이번에는 데이터를 전달하는 방법에 대해 작성해봅니다.

 

1. code로 전환할 때

 

원래 화면 -> 다음 화면으로 데이터 전달 : 전달할 VC로 다운 캐스팅을 해준 후, 해당 VC의 프로퍼티에 값을 직접 전달

guard let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "secondVC") as? SecondVCViewController else { return }
secondVC.textLabel = "글자 보내기"
self.present(secondVC, animated: true, completion: nil)

// secondVC에는 textLabel이라는 문자열 프로퍼티가 선언되어 있음

다음 화면 -> 이전 화면(원래 화면)으로 데이터 전달 : 대리자(Delegate) 선언, 특정 시점에 데이터 전달 (ex. 뒤로가기 시점)

// 프로토콜 선언 (어느 위치에 선언해도 상관 없음)

protocol sendDataDelegate: AnyObject {
	func sendData(data: String)
}





// ----- 전달할 화면 (다음 화면) 속에 해당 코드 구현 -----

// 1. 전달할 화면(secondVC)에 대리자 선언 ( 강한 순환 참조 방지를 위해 weak 변수 선언)

	weak var delegate: sendDataDelegate?
    
// 2. 특정 시점에 데이터 전달

	self.delegate?.sendData(data: "문자 보내기")





// ----- 원래 화면 (이전 화면) 속에 해당 코드 구현 -----


// 1. 원래 화면(이전 화면)에 sendDataDelegate 채택

class firstVC: UIViewController, sendDataDelegate {
	func sendData(data: String) {
    // 받은 데이터를 처리할 코드를 이곳에 구현
    }
}

// 2. 원래 화면 클래스 속 Button에 전달할 화면의 Delegate를 채택

@IBAction func Button(_ sender: UIButton) {
        
        guard let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "secondVC") as? SecondVC else { return }
        secondVC.delegate = self
        self.present(secondVC, animated: true, completion: nil)
}

 

2. segue로 전환할 때

 

원래 화면 -> 다음 화면으로 데이터 전달 : prepare 메서드로 전처리

 

// 원래 화면에서

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let secondVC = segue.destination as? SecondVC {
        secondVC.textLabel = "문자 보내기"
    }
}

// 다음 화면 viewDidLoad()에서

	if let textLabel = textLabel {
    	// 데이터 처리
    }

다음 화면 -> 이전 화면(원래 화면)으로 데이터 전달 : code와 마찬가지로 프로토콜과 대리자를 이용하여 데이터 전달

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함