iOS/Swift 어플 따라하기

[Swift] List 형태 어플1-3 /Segueway로 연결된 ViewController간 데이터 넘기기

Chafle 2022. 3. 14. 18:46
반응형



SegueWay

segueway로 연결 된 ViewController간 데이터 넘기기 과정

 

1-1. ViewController에서 클릭이 됐을 때 segway를 수행하는데
1-2  준비 할 때 데이터를 미리 넘겨주고 싶다.
1-3 데이터의 대한 힌트를 호출 시점에 넣어준다.

2-1 segueway 수행 직전에 준비하는 단계가 있다.
2-2 준비한 데이터와, 데이터에 대한 힌트 작성
2-3 힌트를 가지고 몇 번째 인지 데이터에서 해당하는 index를 가져와서

3. DetailViewcontroll에 꽂는다. => 준비완료
4. 데이터를 가지고 segueway를 타고 
5. viewDidLoad시점에는 메모리만 올라오고 뜨지는 않은 상태
6. 뜨기 직전에 UIcomponent를 다 업데이트(updateUI)시킨다.

 

 

단계별로 코드를 확인 해보겠습니다.

1-1 . ViewController에서 클릭이 됐을 때 segueway를 수행합니다.

segueway를 수행하라는 코드 작성

performSegue(withIdentifier: "showDetail", sender: idexPath.row)

구별인자를 showDetail로 설정했고

1-2, 1-3 : sender
1-2. 준비 할 때 데이터를 미리 넘겨주고 싶다.
1-3. 데이터의 대한 힌트를 호출 시점에 넣어준다.

sender의 파라미터를 통해서 정보를 미리 보낼 수 있는데, 이 정보로 segueway를 실행하기 위한 준비를 할 수 있습니다.

 


수행 명령 이후 준비를 하라!
2-1 segueway 수행 직전에 준비하는 단계가 있습니다.

2-2 준비한 데이터와, 데이터에 대한 힌트 작성

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

 //수행 할 때 UIStoryboardSegue에 sender로 넘어온 데이터를 넘겨주자 

 

        if segue.identifier == "showDetail" {

// 1. 에서 설정한 구별자 "showDetail"로 조건을 답니다.

 

            let vc = segue.destination as? DetailViewController

// segue.detination을 DetailViewController로 캐스팅합니다.

// DetailViewContrller에게 데이터를 줄거야(※DetailViewController는 segueway로 연결된 스토리보드)

       

2-3 힌트를 가지고 몇 번째 인지 데이터에서 해당하는 index를 가져와서

            if let index = sender as? Int{ // 몇 번째인지 보내니까

//1.에서 보낸 정보 sender를 Int로 캐스팅합니다.

 

                vc?.name = nameList[index]

                vc?.bounty = bountyList[index]

            }

// 준비를 마친 상태입니다.

            

        }

    }

    override func viewDidLoad() {

        super.viewDidLoad()

// 실행 직전에

       }

 


DetailViewController에

뜨게 할 UIImageView, UILabel2개 를 각각 DetailViewController에 링크시키고

데이터 프로퍼티에 값을 설정합니다.


 

3. DetailViewcontroll에 꽂는다. => 준비완료

 func updateUI() {

        

        if let name = self.name, let bounty = self.bounty{

            let img = UIImage(named: "\(name).jpg")

            imgView.image = img

            nameLabel.text = name

            bountyLabel.text = "\(bounty)"

        }

        

    }

 

데이터와 값세팅까지 마치고, 이제 데이터를 가지고 sequway를 타게 되는데, 데이터를 가지고 가는 경로가 중요합니다.

 

 

4. 데이터를 가지고 segueway를 탑니다.

 

5. viewDidLoad시점에는 메모리만 올라오고 뜨지는 않은 상태
6. 뜨기 직전에 UIcomponent를 다 업데이트(updateUI)시킨다.

ViewController가 뜨기 전에 메모리는 올라와 있고

보이기 바로 직전에 메모리에 할당된 값들을 업데이트 시켜주는 경로입니다.

 

 

코드 작성 순
Seguway를 수행 명령

Seguway준비

데이터와 메모리 가지고 updateUI메소드에 꽂기

데이터가 Seguway를 탐

띄우기 직전에 업데이트

 

선배님들의 많은 의견 공유 환영합니다.

반응형