ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์€ ์‚ฝ์งˆ์˜ ์‹œ๊ฐ„์„ ๊ฐ–์€

page view controller์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

(์‚ฌ์‹ค page view controller์— ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ ์•„๋‹ˆ๊ณ ..
์ œ๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋งŒ๋‚œ ๋ฌธ์ œ๋“ค ์œ„์ฃผ๋กœ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘)

 

ํ•ด๋‹น ๋ทฐ ๋กœ์ง์€..

๋ชจ๋“  ๊ฒƒ์ด ์ฒ˜์Œ์ด์—ˆ๋˜ ์ €์—๊ฒŒ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์•ˆ๊ฒจ์ฃผ์—ˆ๊ณ , ๋งŽ์€ ์‹œ๊ฐ„ ๊ณ ๋ฏผ์„ ํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

(์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์œผ๋ฉฐ, ๋ฒ„ํŠผ ์„ ํƒ์— ๋”ฐ๋ผ ๋‹ค์Œ ๋ทฐ๋“ค์˜ ๊ตฌ์„ฑ์ด ๋ฐ”๋€Œ๋Š” ๋กœ์ง...)

 

์ €์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ๊ฒช๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•ด ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊ฒจ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฌผ๋ก , ์•„์ง ๊ณต๋ถ€์ค‘์ธ ๊ณผ์ •์—์„œ ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์—

์ €์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ •๋‹ต์€ ์•„๋‹ˆ๊ฒ ์ง€๋งŒ, ๊ทธ๋ž˜๋„ ๋‚˜๋ฆ„ ๊ณ ๋ฏผ ๋งŽ์ด ํ•ด๋ณด๊ณ  ํ•ด๊ฒฐํ•œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค!


๋ฐฐ๊ฒฝ ์„ค๋ช…

  • ๋ฐ”ํ…€ ์‹œํŠธ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ step 3๊นŒ์ง€ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋ฉฐ ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , ์„ ํƒ๋œ ๋ฒ„ํŠผ์ด๋‚˜ ์ž‘์„ฑ๋œ ๋ฌธ์žฅ์„ ํ†ตํ•ด
    Chat gpt์—๊ฒŒ ๋‹ต์„ ์š”์ฒญํ•˜๊ณ  ๋ณด์—ฌ์ฃผ๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.
  • ๋ฐ”ํ…€ ์‹œํŠธ ๊ด€๋ จ VC(๋ถ€๋ชจ VC)์— Container View๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํ•ด๋‹น view์— page view controller(์ž์‹ VC)๋ฅผ ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
    = ๊ฐ step์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด view๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด page view controller๋ฅผ ์ž์‹ ๋ทฐ๋กœ ๊ฐ–๋Š” ๋ถ€๋ชจ VC๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ๊ฐ์˜ ๋ฒ„ํŠผ์€ table view๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋ฉด ๊ฐ view์˜ table view๋ฅผ reloadํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์›Œ ๊ทธ๋ ค์ค๋‹ˆ๋‹ค.
  • step 1์—์„œ ์„ ํƒ๋œ ๋ฒ„ํŠผ์— ๋”ฐ๋ผ, step 2์—์„œ ๋ณด์—ฌ์ ธ์•ผ ํ•˜๋Š” view๊ฐ€ ๋ฐ”๋€๋‹ˆ๋‹ค.
    (1,2 ๋ฒˆ์งธ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฐ ์ฑ„ ๋‹ค์Œ์„ ๋ˆ„๋ฅด๋ฉด, 1,2 ๋ฒˆ์งธ ๋ฒ„ํŠผ๊ณผ ๊ด€๋ จ์žˆ๋Š” step2 VC๋งŒ์„ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.)
  • step 2์—์„œ '๋‚˜๋งŒ์˜ ๋ฌธ์žฅ ์ถ”๊ฐ€ํ•˜๊ธฐ' ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด, ๋‹ค์Œ ๋ทฐ๋กœ step 2-1 VC๊ฐ€ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • step 3๋Š” ๋ฌด์กฐ๊ฑด ๋งˆ์ง€๋ง‰์— ๋ฐฐ์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ… 1,2์—์„œ ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ๋ชจ๋‘ ์„œ๋ฒ„์— ๊ฐœ๋ณ„์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์Šคํ… 2๋Š” ์Šคํ… 1์—์„œ ์„ ํƒ๋œ ๋ฒ„ํŠผ์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํ•จ๊ป˜ ๋ณด๋‚ด ํŠน์ • step 2 ๋ฐ์ดํ„ฐ๋งŒ์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
    • ์ฆ‰, ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋ณผ ๊ฒฝ์šฐ์— API ์š”์ฒญ์„ ๋”ฐ๋กœ 6๋ฒˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋ฌธ์ œ 1: ๋ฒ„ํŠผ์„ ํ†ตํ•ด Page view controller์˜ VC ์ „ํ™˜

  • ๋ณดํ†ต page view controller์—์„œ ํŽ˜์ด์ง€ ์ „ํ™˜์€ tab์ด๋‚˜ swipe ๋™์ž‘์„ ํ†ตํ•ด ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ์•ฑ์˜ UI ๊ฒฝ์šฐ, ๋ฒ„ํŠผ์„ ํ†ตํ•ด ํŽ˜์ด์ง€ ์ „ํ™˜์ด ์ด๋ค„์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • page view controller์˜ ๋ชจ๋“  ์ž์‹ ๋ทฐ์— ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ, ํŽ˜์ด์ง€ ์ „ํ™˜์„ ์ง„ํ–‰ํ•˜๊ธฐ์—๋Š” ์ƒ์„ฑ๋˜๋Š” ๋ฒ„ํŠผ์˜ ์ˆ˜๊ฐ€ ๋งŽ๊ณ , ํŽ˜์ด์ง€ ์ „ํ™˜์— ํ•„์š”ํ•œ ๋กœ์ง์ด ๋งŽ์•„ ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ: prepare ๋ฉ”์„œ๋“œ ํ™œ์šฉ

 

  • continerVC์™€ pageVC๊ฐ€ segway๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด, ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด continerVC์—์„œ page view controller์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  VC๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • prepare๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด, continerVC์—์„œ page view controller๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • pageVC์—์„œ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , containerVC์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆด ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.
// container view controller์—์„œ ๊ตฌํ˜„

// ์„ธ๊ทธ์›จ์ด๋ฅผ ํ†ตํ•ด page view controller ์ €์žฅ
var pageViewController : PageViewController!

// ๋‹ค์Œ ๋ฒ„ํŠผ
@IBAction func nextButtonTapped(_ sender: Any) {
    // ๋‹ค์Œ ํŽ˜์ด์ง€๋กœ ์ด๋™
    pageViewController.setNextViewControllersFromIndex(index: currentIndex)
}

// ์ด์ „ ๋ฒ„ํŠผ
@IBAction func beforeButtonTapped(_ sender: Any) {
    // ์ด์ „ ํŽ˜์ด์ง€๋กœ ์ด๋™
    pageViewController.setBeforeViewControllersFromIndex(index: currentIndex)
}


//MARK: - ์„ธ๊ทธ์›จ์ด์˜ prepare ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ตํ™˜
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
    if segue.identifier == "PageViewController" {
        print("Connected")
        
        // ์„ธ๊ทธ์›จ์ด์˜ ๋„์ฐฉ์ง€์ธ pageVC๋ฅผ ํ˜„์žฌ ๋ถ€๋ชจ VC์— ์ €์žฅ
        guard let vc = segue.destination as? PageViewController else { return }
        pageViewController = vc
        
    }
}
// page view controller์—์„œ ๊ตฌํ˜„

// index ํŒŒ๋ผ๋ฏธํ„ฐ: ์ด์ „ ํŽ˜์ด์ง€ ์ธ๋ฑ์Šค
func setNextViewControllersFromIndex(index : Int){
    
    // ๊ฐ€๋Šฅํ•œ ์ธ๋ฑ์Šค ๋ฒ”์œ„ ์„ค์ •
    guard index >= 0 && index < pageVCArray.count - 1 else { return }
    
    // ๋‹ค์Œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— + 1 ์ž…๋‹ˆ๋‹ค.
    self.setViewControllers([pageVCArray[index + 1]], direction: .forward, animated: true, completion: nil)
    
    // pageVC์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” currentIdex๋ฅผ containerVC์— ์ „๋‹ฌ
    completeHandler?(currentIndex)
}

func setBeforeViewControllersFromIndex(index : Int){

    // ๊ฐ€๋Šฅํ•œ ์ธ๋ฑ์Šค ๋ฒ”์œ„ ์„ค์ •
    guard index > 0 && index < pageVCArray.count  else { return }
    
    // ์ด์ „ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— - 1 ์ž…๋‹ˆ๋‹ค.
    self.setViewControllers([pageVCArray[index - 1]], direction: .reverse, animated: true, completion: nil)
    
    // pageVC์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” currentIdex๋ฅผ containerVC์— ์ „๋‹ฌ
    completeHandler?(currentIndex)
}

๋ฌธ์ œ 2: ๋™์ ์œผ๋กœ ๋ฐ”๋€Œ๋Š” ํŽ˜์ด์ง€ ์ˆœ์„œ

  • ์ฒ˜์Œ์—๋Š” step 1๊ณผ step 3๋Š” ๋ฌด์กฐ๊ฑด ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐœ์˜ VC๋งŒ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ํŽ˜์ด์ง€ ๋ฐฐ์—ด์— ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  • step1์—์„œ ํŠน์ • ๋ฒ„ํŠผ์ด ์„ ํƒ๋  ๋•Œ๋งˆ๋‹ค, ํ•ด๋‹น step 2 VC๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ณด๋‹ค 1 ์ž‘์€ ์œ„์น˜์— ํ•ด๋‹น VC๋ฅผ append ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
  • step 2 VC๊ฐ€ ์ดˆ๊ธฐํ™” ๋˜๋ฉด ๋ฐ”๋กœ ์„œ๋ฒ„ ํ†ต์‹ ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ณ , ํ•ด๋‹น VC์— ์ €์žฅํ•ด์คฌ์Šต๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ๋ฐฉ์‹์— ๋ฌธ์ œ์ ์€ ๋ฒ„ํŠผ์„ ๋ฐ˜๋ณตํ•ด์„œ ๋ˆ„๋ฅผ ๊ฒฝ์šฐ ๋˜‘๊ฐ™์€ VC๊ฐ€ ๋ฐ˜๋ณตํ•ด์„œ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๊ณ , ์„œ๋ฒ„ ํ†ต์‹ ๋„ ๊ณ„์†ํ•ด์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์–ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ: ๋ชจ๋“  VC๋ฅผ ์ดˆ๊ธฐ์— ๋ชจ๋‘ ์ƒ์„ฑ

  • ์ƒํ™ฉ์— ๋”ฐ๋ผ VC๋ฅผ ๊ณ„์†ํ•ด์„œ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ํ†ต์‹ ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ๋ฒ„ํŠผ์— ๋”ฐ๋ผ VC๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•ด๋‹น ๋ทฐ๊ฐ€ ์ฒ˜์Œ ๋“ฑ์žฅํ•  ๋•Œ ๋ชจ๋“  ๊ด€๋ จ ๋ทฐ๋“ค์„ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ณ , ์„œ๋ฒ„ ํ†ต์‹ ์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์ดˆ๊ธฐ์— ๋ชจ๋“  ๊ด€๋ จ VC๋“ค์„ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ๋ฐฐ์—ด์— ์ €์žฅํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    • ๋ฌผ๋ก , ๋ฒ„ํŠผ ์„ ํƒ์— ๋”ฐ๋ผ VC๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹๋„ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ VC๋‚˜ ๋ฐ์ดํ„ฐ๋“ค์„ ๋˜ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ณผ์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉดํ•ด๋‹น ๋ฐฉ๋ฒ•๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ VC๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ํ”„๋กœํผํ‹ฐ๋“ค์ด ๋งŽ์•„์งˆ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ๋ฒˆ์— ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ณ , ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด ์ข€ ๋” ํŽธํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  VC๋ฅผ allPageVCArray์— ์ €์žฅํ•˜๊ณ , step 1 VC์—์„œ ์„ ํƒ๋œ ๋ฒ„ํŠผ๋“ค์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ณ , ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๋ฐฉ์‹์œผ๋กœ page view controller์— ์ „๋‹ฌ ํ•ด์ฃผ๋ฉด, ์„ ํƒ๋œ ์ธ๋ฑ์Šค์˜ ๊ด€๋ จ VC๋“ค์„ pageVCArray ๋ฐฐ์—ด์— ์ƒˆ๋กญ๊ฒŒ ์ €์žฅํ•˜์—ฌ ํŽ˜์ด์ง€ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.
// ๋ถ€๋ชจ ๋ทฐ์— ์‚ฝ์ž…ํ•  pageViewController ๋ฆฌ์ŠคํŠธ
var pageVCArray: [UIViewController] = []

// ์ดˆ๊ธฐ์— ๋ชจ๋“  ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ์ €์žฅํ•  ๋ฐฐ์—ด
var allPageVCArray: [UIViewController] = []

//MARK: - ํŽ˜์ด์ง€ ์ธ๋ฑ์Šค ๋ฐฐ์—ด์— ๋”ฐ๋ผ ํŽ˜์ด์ง€๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ
func updatePageVCArray() {
    // ํŽ˜์ด์ง€ ๋ฐฐ์—ด ์ „์ฒด ์‚ญ์ œ
    self.pageVCArray.removeAll()
    
    // ์ฒซ ๋ฒˆ์งธ ํŽ˜์ด์ง€ ์ถ”๊ฐ€
    self.pageVCArray.append(allPageVCArray[0])
    
    for index in stepTwoVCIndexArray {
        
        switch index {
        case 1:
            self.pageVCArray.append(allPageVCArray[1])
        case 2:
            self.pageVCArray.append(allPageVCArray[2])
        case 3:
            self.pageVCArray.append(allPageVCArray[3])
        case 4:
            self.pageVCArray.append(allPageVCArray[4])
        case 5:
            self.pageVCArray.append(allPageVCArray[5])
        default:
            break
        }
    }
    
    // ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€ ์ถ”๊ฐ€
    self.pageVCArray.append(allPageVCArray[allPageVCArray.count - 1])
    
}

๋ฌธ์ œ 3:  step 2-1๋Š” ์–ด์งธ..๐Ÿ˜…

  • (์š”์ฆ˜ ํ”„๋กœ์ ํŠธํ•˜๋ฉด์„œ ๋Š๋‚€ ๊ฑด๋ฐ.. ๋‹น์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์ œ๋งŒ ํ•ด๊ฒฐํ•˜๋ ค๋‹ค๋ณด๋‹ˆ ๋‹ค์Œ ๊ณผ์ •์€ ์ƒ๊ฐ๋„ ์•ˆํ•˜๊ณ  ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.... )
  • ์•„๋ฌดํŠผ! ์œ„์— ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๋‹ˆ step1~3๋Š” ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ step2์—์„œ step2-1์„ ์š”๊ตฌํ•  ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๋ง‰๋ง‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ์—๋Š” ์œ„์— ๋ฐฉ์‹๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, step2-1๋„ allPageVCArray์— ์ €์žฅํ•ด์„œ, ๋ณด์—ฌ์ค„ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉด ์ธ๋ฑ์Šค์— +1์ด ์•„๋‹Œ +2๋ฅผ ํ•ด์„œ ํŽ˜์ด์ง€ ์ „ํ™˜์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ๋˜ ์ „์ฒด๋ฅผ ๋ณด์ง€ ์•Š๊ณ  ์•ž์— ์žˆ๋Š” ๋ฌธ์ œ๋งŒ ํ•ด๊ฒฐํ•˜๋‹ค ๋ณด๋‹ˆ..
      ๋‹ค์Œ ๋ฒ„ํŠผ์œผ๋กœ๋Š” ์›ํ•˜๋Š” ๋ฐฉ์‹์ด ๊ตฌํ˜„์ด ๋˜์—ˆ๋Š”๋ฐ, ์ด์ „ ๋ฒ„ํŠผ์—์„œ๋„ ๊ฐ™์€ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋ ค๋‹ค ๋ณด๋‹ˆ ๋ชจ๋“  step2 VC์˜ step 2-1 ๋ฒ„ํŠผ ์„ ํƒ์˜ ์œ ๋ฌด๋ฅผ ์ €์žฅํ•ด์„œ ๋งค๋ฒˆ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. 

ํ•ด๊ฒฐ:  Delegate Protocol 

  • ๊ฐ๊ฐ์˜ step2 VC์—์„œ bool ๊ฐ’์œผ๋กœ ๋ฒ„ํŠผ์˜ ์„ ํƒ ์œ ๋ฌด๋ฅผ ํŒ๋‹จํ•˜๊ณ , table view์˜ delegate ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋งˆ์ง€๋ง‰ ์…€์˜ ๋ฒ„ํŠผ์ด ์„ ํƒ๋  ๋•Œ๋งˆ๋‹ค bool ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋˜ํ•œ, ํ•ด๋‹น delegate ๋ฉ”์„œ๋“œ์—์„œ bool ๊ฐ’์— ๋”ฐ๋ผ ํ•ด๋‹นstep2-1 VC๋ฅผ pageVCArray์— ํ˜„์žฌ ์ธ๋ฑ์Šค ๋‹ค์Œ ์ˆœ๋ฒˆ์œผ๋กœ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
// stepTwoViewController

// pageVC๋ฅผ delegate๋กœ ์„ค์ •
var customVCDeldgate: BottomSheetStepTwoCustomDelegate?

// step2 ์ปค์Šคํ…€ ๋ทฐ์ปจ์„ ๋ณด์—ฌ์ค„์ง€ ํŒ๋‹จ์„ ์œ„ํ•œ bool ํ”„๋กœํผํ‹ฐ
// ์ดˆ๊ธฐ์— '๋‚˜๋งŒ์˜ ๋ฌธ์žฅ ์ถ”๊ฐ€'๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— false๋กœ ์ดˆ๊ธฐํ™”
var showStepTwoCustomVC = false

// ๋งˆ์ง€๋ง‰ ์…€์ด ์„ ํƒ๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.row == guideDetailData.count - 1 {
        showStepTwoCustomVC = true
        customVCDeldgate?.showStepTwoCustomVC(bool: showStepTwoCustomVC)
    } else {
        return
    }
}

// ๋งˆ์ง€๋ง‰ ์…€์ด ์„ ํƒ ํ•ด์ œ๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    if indexPath.row == guideDetailData.count - 1 {
        showStepTwoCustomVC = false
        customVCDeldgate?.showStepTwoCustomVC(bool: showStepTwoCustomVC)
    } else {
        return
    }
}
// pageViewController

extension PageViewController: BottomSheetStepTwoCustomDelegate {
	// step2์˜ bool๊ฐ’์„ ํ™•์ธํ•˜๊ณ , step2-1 VC๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•œ๋‹ค.
    func showStepTwoCustomVC(bool: Bool) {
        if bool {
            if let stepTwoCustomVC = makeStepTwoCustomVC() {
                self.pageVCArray.insert(stepTwoCustomVC, at: currentIndex + 1)
            }
        } else {
            self.pageVCArray.remove(at: currentIndex + 1)
        }
    }
}

๋ฌธ์ œ 4:  ๋ฐ์ดํ„ฐ ๋„์ฐฉ ์™„๋ฃŒ ์‹œ์ 

  • ์œ„์— ๋ฐฉ์‹๋“ค๋กœ ํŽ˜์ด์ง€ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๋กœ์ง์€ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ๊ฐ์ง€๋„ ๋ชปํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€๋” ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š” ๋„์ค‘ ํŽ˜์ด์ง€์˜ ์ˆœ์„œ๊ฐ€ ์ œ ์ƒ๊ฐ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    (์‚ฌ์‹ค ์ด๋•Œ๊นŒ์ง€๋งŒ ํ•ด๋„ ๋น„๋™๊ธฐ์— ๋Œ€ํ•ด ํฌ๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค..๐Ÿ˜ญ)
  • ์™œ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ฌ์ง€์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ์— print๋ฅผ ์ฐ์–ด๊ฐ€๋ฉฐ ํ™•์ธํ•œ ๊ฒฐ๊ณผ, allPageVCArray์— step2 VC๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • step2 VC๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์ด step 2 VC๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๊ณ , ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ค๋Š” ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ ๋’ค, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•˜๊ณ , VC์— appendํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. 
  • ์œ„์— ๊ณผ์ •์€ step2 VC๋“ค์˜ ์ˆœ์„œ์— ๋งž๊ฒŒ ์ฝ”๋“œ ์‹คํ–‰์€ ์‹œ์ผฐ์ง€๋งŒ, ์„œ๋ฒ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๋น„๋™๊ธฐ ๊ณผ์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ์ข…๋ฃŒ ์‹œ์ ์—๋Š” ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ์ด ๋˜์ง€ ์•Š์€ ์ฑ„ ๋ฐฐ์—ด์— VC๋“ค์ด ์ถ”๊ฐ€๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ:  VC๋“ค์˜ ์ˆœ์„œ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅ

  • ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๋ฐฐ์—ด์— VC๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•ด์ฃผ๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์ „ํ™˜ ์‹œ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ „ํ™˜์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— VC๋งŒ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์ €์žฅ๋œ๋‹ค๋ฉด ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ ์‹œ์ ์€ ํฐ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒŒ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
  • (์‚ฌ์‹ค ์ด ๋ฐฉ์‹์€ ์•„์ง ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๋ฐฉ์‹์€ ์•„๋‹ˆ์ง€๋งŒ..์ผ๋‹จ์€ ์ž„์‹œ ๋ฐฉํŽธ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ข€ ๋” ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ๋งˆ์Œ์— ๋“œ๋Š” ๋ฐฉ์‹์„ ์ฐพ๊ฒŒ ๋˜๋ฉด ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜Ž ์•„๋งˆ.. async/await๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€๋„..?)
// pageViewController์— ๊ตฌํ˜„

// ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ 5๊ฐœ๋‹ˆ๊นŒ ์šฐ์„ ์€ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑ. but, ๋‚˜์ค‘์— ํŽ˜์ด์ง€๊ฐ€ ๋Š˜์–ด๋‚  ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ˆ˜์ • ํ•„์š”
for index in 1...5 {
    if let stepTwoVC = UIStoryboard(name: "DiaryGuide", bundle: nil).instantiateViewController(withIdentifier: "StepTwoViewController") as? StepTwoViewController {
        // ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ ์ „ ์ˆœ์„œ ๋ณด์žฅ์„ ์œ„ํ•ด ๋ฐฐ์—ด์— ์Šคํ…2 VC ๋ฏธ๋ฆฌ ์ €์žฅ
        self.allPageVCArray.append(stepTwoVC)
        // ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์‹คํ–‰
        fetchGPTDiaryDetailGuide(index: index, stepTwoVC: stepTwoVC)
    }
}

๋งˆ๋ฌด๋ฆฌ

์•„์ง ํ”„๋กœ์ ํŠธ๊ฐ€ ์™„์„ฑ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด์ง€๋งŒ, ์ง€๊ธˆ ์ €์˜ ์ƒํƒœ๋ฅผ ๋‚จ๊ฒจ๋ณด๊ณ  ์‹ถ์–ด ์—ด์‹ฌํžˆ ์ ์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

ํ˜„์žฌ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ์‹๋“ค ์ค‘ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š” ๋ถ€๋ถ„๋“ค๋„ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ๊พธ์ค€ํžˆ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์„ ์ง„ํ–‰ํ•ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. (์•ฑ ์ถœ์‹œ๊ฐ€ ์ œ์ผ ์šฐ์„ ..)


๋” ํšจ์œจ์ ์ด๊ณ  ๋‚˜์€ ๋ฐฉ์‹์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š” !

์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ์ง€์ ํ•ด์ฃผ์‹œ๊ณ , ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿค“

 

2024๋…„ ๊ฐœ๋ฐœ ๊ณต๋ถ€์™€ ์˜์–ด ๊ณต๋ถ€ ๊พธ์ค€ํ•˜๊ฒŒ ํ•ด๋ณด์ž.

์•„์ž ์•„์žโ—๏ธ  ํ™”์ดํŒ…โค๏ธ‍๐Ÿ”ฅ