세그(Segue)를 통한 화면 전환시 데이터 전달해보기(연습)

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


세그(Segue)를 통한 화면 전환시 데이터 전달해보기

1.[Editor] > [Embed In] > [Navigation Controller] 선택

2.view controller 추가 생성 후 해당 뷰 컨트롤러에 대한 클래스 파일 생성

3.셀을 클릭하면 SecondViewController로 넘어갈 수 있도록 설정

4.새로 생성한 SecondViewController의 클래스 명을 지정후 해당 뷰 컨트롤러에 레이블 하나 추가

5.셀의 텍스트가 레이블에 넘어갈 수 있도록 레이블에 해당하는 outlet 작성후 드래그 연결


import UIKit

class SecondViewController: UIViewController {

    var textToSet: String?
    @IBOutlet weak var textLabel: UILabel!
}

6.아래의 코드를 참고하여 세그를 코드로 구현 > viewController에 작성

// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destination.
    // Pass the selected object to the new view controller.
}

위 코드의 의미 > 스토리보드를 사용한 애플리케이션에서 네비게이션 되기 전에 준비해야될 것이 있을 것이다. segue.destination을 사용해 다음 뷰 컨트롤러를 가져올 수 있고 그곳에 원하는 내용을 보내줄 수 있다.

// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destination.
    // Pass the selected object to the new view controller.
    guard let nextViewController: SecondViewController = segue.destination as? SecondViewController else {
        return
    }

    guard let cell: UITableViewCell = sender as? UITableViewCell else {
        return  // 네이게이션의 흐름을 만드는 sender
    }

    nextViewController.textToSet = cell.textLabel?.text  // 셀에 해당하는 텍스트를 다음화면으로 전달
//        nextViewController.textLabel.text = cell.textLabel?.text
}

7.뷰가 나타나기 전에 레이블에 글자가 보이도록 코드 작성 > SecondViewController에 작성

import UIKit

class SecondViewController: UIViewController {

    var textToSet: String?
    @IBOutlet weak var textLabel: UILabel!

    override func viewWillAppear(_ animated: Bool) {  // 화면이 보여지기 전에 레이블에 이미 글자가 셋팅이 되어있어야 함
        super.viewWillAppear(animated)
        self.textLabel.text = self.textToSet
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
}