์ƒˆ์†Œ์‹

๐Ÿ“ฑ iOS/-- UIKit

(iOS) ํ™”๋ฉด ์ „ํ™˜ ๋ฐฉ์‹ (present, pushViewController, Segue)

  • -

 

iOS์˜ ํ™”๋ฉด ์ „ํ™˜ ๋ฐฉ์‹

IOS์˜ ํ™”๋ฉด ์ „ํ™˜ ๋ฐฉ์‹์€ ํฌ๊ฒŒ2๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

1. ์†Œ์Šค์ฝ”๋“œ์—์„œ ๊ตฌํ˜„ - "ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ํ™”๋ฉด ์ „ํ™˜ํ•œ๋‹ค" or "๋™์ ์œผ๋กœ ํ™”๋ฉด ์ „ํ™˜ํ•œ๋‹ค."

2. ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ๊ตฌํ˜„ - "GUI ๋ฐฉ์‹์œผ๋กœ ํ™”๋ฉด์„ ์ „ํ™˜ํ•œ๋‹ค." or "์ •์ ์œผ๋กœ ํ™”๋ฉด์„ ์ „ํ™˜ํ•œ๋‹ค."

1๋ฒˆ์˜ ๊ฒฝ์šฐ์—๋Š” ํŠน์ • ์ƒํ™ฉ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ตฌํ˜„์ด ์–ด๋ ต๊ณ  ๋ณต์žกํ•˜๋‹ค.

2๋ฒˆ์˜ ๊ฒฝ์šฐ๋Š” ํŠน์ • ์ƒํ™ฉ์— ๋Œ€์‘ํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ, ๊ตฌํ˜„ํ•˜๊ธฐ๋Š” ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

IOS์—์„œ์˜ ํ™”๋ฉด ์ „ํ™˜ ๊ฐœ๋…๊ณผ ์ข…๋ฅ˜

1. ViewController์˜ View ์œ„์— ๋‹ค๋ฅธ View๋ฅผ ๊ฐ€์ ธ์™€ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ์‹

  • ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์—์„œ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. (= ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.)
  • ์ด๋ฅผ Container View Controller ๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ด ๋ฐฉ์‹์„ ์ œ์™ธํ•œ 2,3,4๋ฒˆ์€ ๋ชจ๋‘ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” View Contoller๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

2. ViewController์—์„œ ๋‹ค๋ฅธ ViewController๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ™”๋ฉด ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ์‹.

3. ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ์‹.

4.ํ™”๋ฉด ์ „ํ™˜์šฉ ๊ฐ์ฒด ์„ธ๊ทธ์›จ์ด(Segueway)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹.

์ฆ‰, 1๋ฒˆ์„ ์ œ์™ธํ•œ 2,3,4 ๋ฐฉ์‹์€ ์ƒˆ๋กœ์šด ํ™”๋ฉด์„ ๋‹ด๋‹นํ•  ViewController์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๋ถˆ๋Ÿฌ๋“ค์—ฌ ๊ธฐ์กด ํ™”๋ฉด์— ๋ฎ์–ด ์”Œ์šฐ๋Š” ๋ชจ์–‘์ƒˆ์˜ ๋ฐฉ์‹์ด๋‹ค.

๋”ฐ๋ผ์„œ ๊ธฐ์กด ํ™”๋ฉด - ์ƒˆ๋กœ์šด ํ™”๋ฉด ์‚ฌ์ด์—๋Š” ์ƒํ˜ธ ์ฐธ์กฐ ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝ๋œ๋‹ค. (์ง์ ‘ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜, ํ˜น์€ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ฐธ์กฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.) ์ƒํ˜ธ ์ฐธ์กฐํ•˜๋Š” ์ด์œ ๋Š” ํ™”๋ฉด์ด ์ „ํ™˜๋œ ํ›„์—๋„ ์ด์ „ํ™”๋ฉด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋˜๋Œ์•„๊ฐ€์•ผํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

ํ™”๋ฉด ์ „ํ™˜์—์„œ ์ค‘์š”ํ•œ๊ฒƒ์€ ๋‹ค์Œ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๋Š” ๋ฐฉ๋ฒ•์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด์ฃผ์–ด์•ผ ์ถฉ๋Œ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒƒ์ด๋‹ค. ํ™”๋ฉด์ด๋™์‹œ์— ํ™”๋ฉด์„ ๊ณ„์† ์Œ“๋Š” ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐˆ๋•Œ๋Š” ํ™”๋ฉด์„ ๊ฑท์–ด๋‚ด๋Š” ๋ฐฉ์‹์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

 

(1) ViewController ์ง์ ‘ ํ˜ธ์ถœ์— ์˜ํ•œ ํ™”๋ฉด ์ „ํ™˜ : ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ฐฉ์‹ ํ™”๋ฉด์ „ํ™˜

๋ชจ๋“  ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” UIViewController ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค. ์ด ํด๋ž˜์Šค์—์„œ๋Š” present๋ผ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด์žˆ๋‹ค.

Present ๋ฉ”์†Œ๋“œ

  • present(<์ƒˆ๋กœ์šด ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ์ธ์Šคํ„ด์Šค>, animated: <์• ๋‹ˆ๋ฉ”์ด์…˜ ์—ฌ๋ถ€(Bool)>)
  • present(<์ƒˆ๋กœ์šด ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ์ธ์Šคํ„ด์Šค>, completion: <ํ™”๋ฉด ์ „ํ™˜ ์™„๋ฃŒ๋•Œ ์‹คํ–‰๋  ๋ฉ”์†Œ๋“œ>)

ํ™”๋ฉด์ „ํ™˜์€ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ํ™”๋ฉด์„ ๋ถˆ๋Ÿฌ์˜จ ์‹œ์ ์— ์‹คํ–‰๋  ๋กœ์ง์„ present ๋ฉ”์†Œ๋“œ ๋ฐ”๋กœ ์•„๋ž˜์— ์ ๋Š”๊ฒƒ์€ ์‹คํŒจํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ, completion ์ธ์ž๋ฅผ ํ™œ์šฉํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.

๋น„๋™๊ธฐ ๋ฐฉ์‹ : ํ™”๋ฉด ์ „ํ™˜์€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— ๋•Œ๋กœ๋Š” ํ™”๋ฉด์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ž‘์—…์„ ํ•˜๋ฉด์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

presentํ•  ViewController์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜๊ธฐ

๋‹ค์ŒVC์™€ ์ด์ „VC๊ฐ€ ๊ฐ™์€ ์Šคํ† ๋ฆฌ๋ณด๋“œ ํŒŒ์ผ์— ์žˆ๋Š” ๊ฒฝ์šฐ

์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ Identity - storyboard ID ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ™์€ ์Šคํ† ๋ฆฌ๋ณด๋“œ ํŒŒ์ผ์— ์žˆ์œผ๋ฏ€๋กœ self.storyboard๋กœ ์ ‘๊ทผํ•˜๋ฉด๋œ๋‹ค.

let nextScene = self.storyboard!.instantiateViewController(Identifier: "AfterViewController"

 

๋‹ค์ŒVC์™€ ์ด์ „VC๊ฐ€ ๋‹ค๋ฅธ ์Šคํ† ๋ฆฌ๋ณด๋“œ ํŒŒ์ผ์— ์žˆ๋Š” ๊ฒฝ์šฐ

let storyboard = UIStoryboard(name : "<์Šคํ† ๋ฆฌ๋ณด๋“œ ํŒŒ์ผ๋ช…>", bundle: Bundle.main)
let afterVC = storyboard.instantiateViewController(identifier: "AfterViewController")

 

์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ : dismiss

์ด์ „ ํ™”๋ฉด์„ BeforeVC , ๋‚˜์ค‘ ํ™”๋ฉด์„ AfterVC ๋ผ๊ณ  ํ• ๋•Œ, ์ด ๋‘๊ฐœ์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•œ๋‹ค. ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ์„ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํฌ์ธํ„ฐ(์ฃผ์†Œ๊ฐ’)์„ presentedViewController ์†์„ฑ์— ์ €์žฅํ•œ๋‹ค.

๋‹ค์Œ ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด๊ฐˆ๋•Œ๋Š” present ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋˜๋Œ์•„๊ฐˆ ๋•Œ๋Š”

dismiss(animated : completion : ) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด์ „ํ™”๋ฉด์œผ๋กœ ๋ณต๊ท€ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹น์—ฐํžˆ ์ธ์ž๊ฐ’์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋„ฃ์–ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

*์ฃผ์˜ํ•  ์ 

ํ˜„์žฌ ๋„์šฐ๊ณ  ์žˆ๋Š” ํ™”๋ฉด์ด AfterVC์ด๋‹ค. ์ด AfterVC๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋‹น์—ฐํžˆ BeforeVC์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  AfterVC๋ฅผ dismissํ•˜๋Š”๊ฒƒ๋„ BeforeVC๋ผ๋Š” ์ ์„ ์•Œ์•„์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ self.dismiss() ์˜ ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ, self.presentingViewController?.dismiss()์˜ ํ˜•ํƒœ๋กœ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค.

 

 

์‹ค์Šต(์ฝ”๋“œ)

์ดˆ๊ธฐ ํ™”๋ฉด

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var beforeViewLabel: UILabel!
    @IBOutlet weak var beforeViewButton: UIButton!
    @IBAction func goNextScene(_ sender: Any) {
     // ๋‹ค์Œ ํ™”๋ฉด ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ (StoryBoardID๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฐธ์กฐ)
        if let nextScene = self.storyboard?.instantiateViewController(withIdentifier: "AfterScene"){
                nextScene.modalTransitionStyle = UIModalTransitionStyle.coverVertical
        // ํ™”๋ฉด ์ „ํ™˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ํƒ€์ž…
        self.present(nextScene, animated : true)
        print(type(of: self))
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        beforeViewLabel.text = "์ด์ „ ํ™”๋ฉด"
        beforeViewButton.setTitle("๋‹ค์Œ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๊ธฐ", for: .normal)
    }
}

 

 

ํ™”๋ฉด ์ „ํ™˜ ์Šคํƒ€์ผ ( modalTransitionStyle)

์œ„ ์ฝ”๋“œ์—์„œ ์ฃผ์„ : ํ™”๋ฉด ์ „ํ™˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ํƒ€์ž… ๋ถ€๋ถ„์„ ๋ณด๋ฉด

nextScene.modalTransitionStyle = UIModalTransitionStyle.coverVertical

๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ ํ™”๋ฉด ์ „ํ™˜์‹œ์˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

UIViewController์— ์ •์˜๋˜์–ด ์žˆ๋Š” modalTransitionStyle์†์„ฑ์„ ํ†ตํ•˜์—ฌ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

<์ „ํ™˜ ํ•  ํ™”๋ฉด์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ์ธ์Šคํ„ด์Šค>.modalTransitionStyle = UIModalTransitionStyle.<๋ชจ๋‹ฌ์Šคํƒ€์ผ>๋”ฐ๋กœ ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ coverVertical๋กœ ์ง€์ •๋œ๋‹ค.


 

(2) ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ด์šฉํ•œ ํ™”๋ฉด์ „ํ™˜

๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ž€

UINavigationController๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ผ์ข…์ด๋‹ค. ํ•˜์ง€๋งŒ VC์˜ ์ผ์ข…์ด๋ผ ํ•ด์„œ ํŠน๋ณ„ํ•œ ํ™”๋ฉด์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง„ ์•Š์ง€๋งŒ, ๋‹ค๋ฅธ VC๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ณ„์ธต์ ์ธ ์ฝ˜ํ…์ธ ๋ฅผ ๊ด€๋ฆฌํ• ๋•Œ ์œ ์šฉํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ด€๋ฆฌํ•˜์— ์žˆ๋Š” ๋ชจ๋“  VC์—๋Š” ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”๊ฐ€ ๋‚ด์žฅ๋˜๊ฒŒ ๋œ๋‹ค.

๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ™”๋ฉด ์ „ํ™˜์„ ์ง์ ‘ ์ปจํŠธ๋กคํ•˜๋ฉฐ, VC๋“ค์˜ ํฌ์ธํ„ฐ๋ฅผ ์Šคํƒ(Stack)์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

Root VC

๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•ญ์ƒ ์‹œ์ž‘์  ์—ญํ• ์„ ํ•˜๋Š” VC๋ฅผ ๊ฐ–๊ฒŒ๋˜๋Š”๋ฐ, ์ด๋ฅผ ๋ฃจํŠธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค. ์ด ์™ธ์—๋Š”ListViewController , DetailViewController๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

pushViewController(_:animated:)

๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” VC๋“ค์„ ์Šคํƒ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— push, pop ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

pushViewController๋ฉ”์†Œ๋“œ๋Š” ์Šคํƒ์— VC๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋ฉฐ, ์Šคํƒ์—์„œ ์ตœ ์ƒ์œ„์— ์žˆ๋Š” VC๊ฐ€ ํ˜„์žฌ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” VC๊ฐ€ ๋œ๋‹ค. (๋”ฐ๋ผ์„œ rootVC๋Š” ๊ฐ€์žฅ ๋ฐ‘์— ์กด์žฌํ•˜๊ฒŒ๋œ๋‹ค.) ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์ƒ์€ self.navigationController๊ฐ€ ๋œ๋‹ค.

@IBAction func moveNextVC(_sender: Any){
    guard let nextVC = self.storyboard?.instantiateViewController(withIdentifier:"nextVC")else{return}    
    self.navigationController?.pushViewController(nextVC, animated: true)
}

popViewController(animated:)

ํ•œ๋‹จ๊ณ„ ์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€๋ ค๋ฉด popViewController(animated:) ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค. UIViewController? ํƒ€์ž…์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, _ =๋ฅผ ๋„ฃ์–ด์ฃผ์–ด ๊ฒฝ๊ณ ์ฐฝ์ด ๋œจ์ง€ ์•Š๊ฒŒ ํ•ด์ค€๋‹ค.

_ = self.navigationController?.popViewController(animated: true)
//Swift์—์„œ ์–ธ๋”๋ฐ”๋Š” "๊ฐ’์„ ๋Œ€์ž…ํ•  ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ๊ทธ ๊ฐ’์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ๋ง๋ผ"๋Š” ์ƒํ™ฉ์ผ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. (์ต๋ช… ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ)

๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์žˆ๋Š” ViewController๋ผ๋„, ํ™”๋ฉด ์ „ํ™˜์„ present๋ฉ”์†Œ๋“œ๋กœ ํ•˜๊ฒŒ ๋˜๋ฉด ๋„ค๋น„๊ฒŒ์ด์…˜๋ฐ”๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•ญ์ƒ pushViewController๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

 

 

(3) ์„ธ๊ทธ์›จ์ด (Segue)๋ฅผ ํ†ตํ•œ ํ™”๋ฉด ์ „ํ™˜

์„ธ๊ทธ์›จ์ด๋Š” ํ™”๋ฉด๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ํ•˜๋Š”๋ฐ์— ์ฝ”๋“œ๋ฅผ ํ•„์š”๋กœํ•˜์ง€ ์•Š๋Š”๋‹ค. ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ• ๋•Œ ์ง๊ด€์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„ ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ViewController์™€ ViewController๋ฅผ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๋Š” ์‹์œผ๋กœ ํ™”๋ฉด ์ „ํ™˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์„ธ๊ทธ์›จ์ด์˜ ์ข…๋ฅ˜

  1. ๋ฉ”๋‰ด์–ผ ์„ธ๊ทธ์›จ์ด : ViewController ๋‚ด๋ถ€์— ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•. UIKit์— ์ •์˜๋˜์–ด ์žˆ๋Š” performSegue(withIdentifier: , sender:) ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
  2. ์•ก์…˜ ์„ธ๊ทธ์›จ์ด : ๋ฒ„ํŠผ ํ˜น์€ ํ…Œ์ด๋ธ” ์…€์˜ ํ„ฐ์น˜์ด๋ฒคํŠธ์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ํ™”๋ฉด์„ ์ „ํ™˜ํ•œ๋‹ค. ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ํ•„์š” ์—†์œผ๋ฉฐ, ํŠธ๋ฆฌ๊ฑฐ ์„ธ๊ทธ์›จ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

์•ก์…˜ ์„ธ๊ทธ์›จ์ด

  1. Ctrl์„ ๋ˆ„๋ฅธ์ฑ„๋กœ ๋ฒ„ํŠผ๊ณผ ๋‹ค์Œ ํ™”๋ฉด์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.
  2. ํƒ€์ž…์„ ๊ณจ๋ผ์ค€๋‹ค.

๋ฉ”๋‰ด์–ผ ์„ธ๊ทธ์›จ์ด

๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ๊ทธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

๋ฉ”๋‰ด์–ผ ์„ธ๊ทธ์›จ์ด๋กœ ํ™”๋ฉด์ „ํ™˜ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ Scene์˜ ๋„์ปค -> Ctrl + 3๊ฐœ์ค‘ ๊ฐ€์žฅ ์™ผ์ชฝ(ViewController) ๋ฒ„ํŠผ ํด๋ฆญ -> ๋“œ๋ž˜๊ทธ ํ•ด์„œ ๋‹ค์Œ Scene๊ณผ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.
  2. 1๋ฒˆ์„ ๋งˆ์ณค์œผ๋ฉด ์„ธ๊ทธ ํ™”์‚ดํ‘œ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. ์„ธ๊ทธ ํ™”์‚ดํ‘œ ํด๋ฆญ -> Attribute inspector์—์„œ Segue Identifier๋ฅผ ์ž…๋ ฅํ•ด์ค€๋‹ค.
  3. ํ™”๋ฉด ์ „ํ™˜์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์— ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด self.performSegue(withIdentifier: "2stVC" , sender:self)

Unwind (์ด์ „ํ™”๋ฉด์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๊ธฐ)

๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ™”๋ฉด ๋ณต๊ท€๋Š” popViewController ๋ฉ”์†Œ๋“œ๋ฅผ, ๊ทธ๋ฆฌ๊ณ  ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ฐฉ์‹์—์„œ๋Š” dismiss๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋˜๋Œ์•„๊ฐ”๋‹ค.

  1. ์„ธ๊ทธ์›จ์ด์—์„œ ์ด์ „ํ™”๋ฉด์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๋ ค๋ฉด, ๋Œ์•„๊ฐ€๋ ค๋Š” ViewController์— ์•ก์…˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋˜๊ณ , ๋”ฐ๋กœ Outlet์—ฐ๊ฒฐ์€ ํ•„์š” ์—†๋‹ค.
//ํ™”๋ฉด 2์˜ ViewController์— ์ž‘์„ฑ

@IBAction func backToPage2(_ sender: UIStoryboardSegue) {
        print("2๋ฒˆ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.")
    }
  1. Ctrl์„ ๋ˆ„๋ฅธ์ฑ„ ๋„์ปค์˜ Exit๊ณผ ๋ฒ„ํŠผ์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

  1. ์—ฐ๊ฒฐํ•˜๋ฉด ์ž‘์„ฑํ•œ ์•ก์…˜๋ฉ”์†Œ๋“œ๋“ค์„ ์ธ์‹ํ•ด์„œ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์™€์ค€๋‹ค. ์—ฌ๊ธฐ์„œ ์›ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ํƒํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋ฐ”๋กœ ์ด์ „ ํ™”๋ฉด์ด ์•„๋‹Œ, 3๋‹จ๊ณ„ ์ด์ „ ํ™”๋ฉด์œผ๋กœ๋„ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋Œ์•„๊ฐ€๋Š” ๊ฒฝ์šฐ์— ์Šคํƒ์— ์Œ“์—ฌ์žˆ๋˜ ๋‹ค๋ฅธ ํ™”๋ฉด๋“ค์€ ์ž๋™์œผ๋กœ deallocate ๋œ๋‹ค.

์„ธ๊ทธ์›จ์ด์˜ ์ „์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ

์ฝ”๋“œ๋กœ ํ™”๋ฉด์ „ํ™˜์„ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด ์ „ํ™˜ ๊ณผ์ •์„ ์ง์ ‘ ์ œ์–ดํ• ์ˆ˜ ์žˆ์ง€๋งŒ, ์„ธ๊ทธ์›จ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž์œ ๋„๊ฐ€ ์ œํ•œ๋œ๋‹ค. ์„ธ๊ทธ์›จ์ด๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ฝ”์ฝ”์•„ ํ„ฐ์น˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํŠน์ • ๋ฉ”์†Œ๋“œ๋ฅผ ์ž๋™์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์ œํ•œ๋œ ์ž์œ ๋„๋ฅผ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ’์„ ๋‹ค์Œํ™”๋ฉด์œผ๋กœ ์ „๋‹ฌํ• ๋•Œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

prepare(for segue: UIStoryboardSegue, sender : Any?){...} ์ด ๋ฉ”์„œ๋“œ๋Š” ์‹œ์Šคํ…œ์—์„œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— overrideํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

override func prepare(for segue: UIStoryboardSegue, sender: Any?){
  print("์„ธ๊ทธ์›จ์ด๊ฐ€ ๊ณง ์‹คํ–‰๋  ์˜ˆ์ •")
}
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.