๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

study iOS๐ŸŽ/์ฃผ์ ‘ iOS - iOS ํ…Œ๋งˆ

[๊พธ์ค€i-OS] unwind segue (์‰ฌ์šด ์„ค๋ช…, easy-explained)

# ๋‹จ์–ด ๋œป

ํ’€๋‹ค, ๋˜๊ฐ๋‹ค.

์˜์–ด ๋‹จ์–ด์˜ ๋œป์„ ๋จผ์ € ์‚ดํŽด๋ณด๋‹ˆ, 'ํ’€๋‹ค'๋„ค์š”. ๋˜ํ•œ, ์ด ๋‹จ์–ด๋Š”, ๋น„๋””์˜ค์— ๋Œ€ํ•œ ๋งฅ๋ฝ์—์„œ ๋ณด๋ฉด, ๋˜๊ฐ๋‹ค์˜ ์˜๋ฏธ๋„ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์„ธ๊ทธ์›จ์ด๋ฅผ ํ†ตํ•ด, ํ•˜์œ„ ์Šคํฌ๋ฆฐ์œผ๋กœ ์ด๋™ํ•œ ๊ฒƒ์„ "๋˜๊ฐ๋Š”", "๋Œ์•„๊ฐ€๋Š”" ์„ธ๊ทธ์›จ์ด ์ž…๋‹ˆ๋‹ค.

 

# ์Šคํฌ๋ฆฐ ๋˜๊ฐ๊ธฐ์˜ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•

 

1. delegate๊ฐ€ ๋˜์–ด, ์ƒ์œ„ ์Šคํฌ๋ฆฐ์„ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ด์šฉํ•ด popํ•˜๊ธฐ. 

    * ์ด ๋ฐฉ๋ฒ• ๋งŽ์ด ์“ฐ์ฃ . 

    * delegate protocol์„ ์ •์˜ํ•˜๊ณ ,

    * ์ƒ์œ„ ์Šคํฌ๋ฆฐ์€ ๊ทธ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ ,

    * ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ,

    * ์„ธ๊ทธ์›จ์ด prepareํ•  ๋•Œ ๋‹ค์Œ ์Šคํฌ๋ฆฐ์˜ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๊ฐ€ ๋˜๊ณ 

    * ๊ทธ ๋‹ค์Œ ์Šคํฌ๋ฆฐ์—์„œ '์™„๋ฃŒ' ๋ฒ„ํŠผ์— ๋Œ€ํ•œ ์•ก์…˜ ๋ฉ”์†Œ๋“œ๋กœ์„œ, delegate์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

    * ์ด ์‹œ์ ์—, ๊ทธ ๋‹ค์Œ ์Šคํฌ๋ฆฐ์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์œ„ ์Šคํฌ๋ฆฐ์— ๊ฐ€์ ธ์™€ ์—ฌ๋Ÿฌ ์ฒ˜๋ฆฌ๋„ ํ•  ์ˆ˜ ์žˆ๊ตฌ์š”.

 

ํ•˜์ง€๋งŒ, ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋งค์šฐ ๊ท€์ฐฎ์Šต๋‹ˆ๋‹ค.

" ๊ฑ ๋‹ค์Œ ์Šคํฌ๋ฆฐ๊ฐ€์„œ ์–ด๋–ค ๊ฑฐ ์„ ํƒํ•˜๋ฉด, ๊ทธ๊ฑฐ ๊ฐ€์ ธ์˜จ๋‹ค " ์ •๋„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ, ์ €ํฌ๊ฐ€ ์ €๋ ‡๊ฒŒ๊นŒ์ง€ ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๊นŒ?

unwind segue ๊ตฌํ˜„

* ๋‹ค์Œ ์Šคํฌ๋ฆฐ์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์œ„ ์Šคํฌ๋ฆฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค !!

 

# ๋ฐฉ๋ฒ•

์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด, ์„ค๋ช…ํ• ๊ฒŒ์š”.

์ƒ์œ„ ์Šคํฌ๋ฆฐ. ์ด ์žฅ์†Œ์— ๋งž๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ด ๋ฐ‘์— ๋‚˜์˜ค๋Š” ์Šคํฌ๋ฆฐ์— ๊ฐ€์„œ ๊ณจ๋ผ์˜ค๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.
์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ํ”ฝํ•  ์ˆ˜ ์žˆ๋Š” ํ”ผ์ปค์ž…๋‹ˆ๋‹ค.

 

 

 

1. ์šฐ์„  ์ƒ์œ„ ์Šคํฌ๋ฆฐ์—์„œ, ์•ก์…˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ , ์„ธ๊ทธ์›จ์ด์˜ ์†Œ์Šค๋ฅผ, ๊ทธ ๋‹ค์Œ ์Šคํฌ๋ฆฐ์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด๋ ‡๊ฒŒ์š” !!

    @IBAction func categoryPickerDidPickCategory(_ segue: UIStoryboardSegue) {
        let controller = segue.source as! CategoryPicker
        categoryName = controller.selectedCategoryName
        print(categoryName)
        categoryLabel.text = categoryName
    }

* ๊ทธ ๋‹ค์Œ ์Šคํฌ๋ฆฐ์—์„œ ์ด unwind ์„ธ๊ทธ์›จ์ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ์ด ์ƒ์œ„ ์Šคํฌ๋ฆฐ์ด ์–ด๋–ค ์‹œํ€€์Šค๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ง€ ์จ์ค๋‹ˆ๋‹ค. ์ฃผ๋กœ, ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์ฃ . ์—ฌ๊ธฐ์„œ๋Š” ํ”ฝ ๋ฐ›์€ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ, ์ž์‹ ์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ์™ ์ €์žฅํ•˜๋Š” ๊ฑธ๋กœ ์ผ๋„ค์š”.

 

 

 

2. ๊ทธ ๋‹ค์Œ ์Šคํฌ๋ฆฐ์—์„œ, ์„ธ๊ทธ์›จ์ด ํŠธ๋ฆฌ๊ฑฐ๋ฅผ unwind segue ์•„์ด์ฝ˜( ๋งจ ์˜ค๋ฅธ์ชฝ )์— ์—ฐ๊ฒฐํ•˜์—ฌ, ์œ„ ์•ก์…˜๋ฉ”์„œ๋“œ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

 

ํŠน์ • ์…€์„ ๋ˆŒ๋ €์„ ๋•Œ, ๋˜๊ฐ๊ธฐ ์„ธ๊ทธ์›จ์ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์œผ๋ฉด, ์ด๋ฏธ ์ƒ์œ„ ์Šคํฌ๋ฆฐ์— ์„ธ๊ทธ์›จ์ด์— ๋Œ€ํ•œ ์•ก์…˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, ์ด ์…€์„ ์ปจํŠธ๋กค ๋“œ๋ž˜๊ทธํ•˜์—ฌ, ์ € ๋ฌธ๋‹ซ๊ณ  ๋‚˜๊ฐ€๋Š” ๋“ฏํ•œ ๋งจ ์˜ค๋ฅธ์ชฝ ์•„์ด์ฝ˜์— ์—ฐ๊ฒฐํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด, ์ด ์„ธ๊ทธ์›จ์ด ์‹คํ–‰ ์‹œ ์‹คํ–‰ํ• , ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. selection segue๋ฅผ ๊ณจ๋ผ์ค๋‹ˆ๋‹ค.

 

 

3. ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฐ์—์„œ, prepare for ๊ตฌํ˜„

 

* ํ•ด๋‹น ์•ก์…˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์—, ๋ณด๋‚ด๋Š” ์ชฝ์—์„œ, ๋ฏธ๋ฆฌ ์‹คํ–‰๋˜์–ด์•ผํ•  ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด, prepare๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ). ์…€๋ ‰์…˜๊ณผ ๋™์‹œ์— unwind segue๊ฐ€ ์‹คํ–‰๋˜๊ณ , ์ƒ์œ„ ์Šคํฌ๋ฆฐ์€ ๋ฐ›์€ selectedCategoryName๊ฐ’์„ ์ทจํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋˜์–ด์žˆ์–ด, ํŠน์ • ์…€์ด ์„ ํƒ๋  ๋•Œ selectedCategoryName์ด ์„ ํƒํ•œ ์ธ๋ฑ์Šค์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์ ˆ์ฐจ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฐ„๊ทน์„ ๋ฉ”์›Œ์ฃผ๋Š” ๊ณณ์ด, ๋ฐ”๋กœ ๋ณด๋‚ด๋Š” ์ชฝ์˜ "prepare(for: sender)" ๋ฉ”์„œ๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์•—, ์–ธ์™€์ธ๋“œ ์„ธ๊ทธ์›จ์ด ์ „์—, ์ด๋Ÿฐ ๊ฑธ ๋ฏธ๋ฆฌ ์„ธํŒ…ํ•ด์ค˜ ~ ๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์œ ์ €๊ฐ€ ์–ด๋–ค ์…€์„ ๊ณ ๋ฅผ ๋•Œ, ๋ฐ”๋กœ ์–ธ์™€์ธ๋“œ ์„ธ๊ทธ์›จ์ด๊ฐ€ ์‹คํ–‰๋˜๋„ค ใ… ใ…  ๊ทธ ์ „์— ์ƒ์œ„ ์Šคํฌ๋ฆฐ์ด ์ทจํ•  ๋‚˜์˜ ๋ณ€์ˆ˜์—, ์ด ๊ฐ’์„ ๋ฐ˜์˜ํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ, ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ณด๋‹ค ์กฐ๊ธˆ ๊ฐ„๋‹จํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

  1. ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋กœ ๋ญํ•  ์ง€ action method ๊ตฌํ˜„

  2. ๋‹ค์Œ ์Šคํฌ๋ฆฐ์—์„œ ์–ธ์™€์ธ๋“œ ์„ธ๊ทธ์›จ์ด ์•„์ด์ฝ˜์— ์ปจํŠธ๋กค ๋“œ๋ž˜๊ทธ

  3. ์„ธ๊ทธ์›จ์ด ์‹คํ–‰ ์ „ ์…‹์—…ํ•  ๊ฒŒ ์žˆ๋‹ค๋ฉด prepare 

 

๊ทธ๋Ÿผ ์ด๋งŒ.