Skip to content

Latest commit

ย 

History

History
358 lines (192 loc) ยท 10.5 KB

first_Assignment_Readme.md

File metadata and controls

358 lines (192 loc) ยท 10.5 KB

1์ฃผ์ฐจ ๊ณผ์ œ

ํŒŒ์ผ๋กœ ์ด๋™ํ•˜๊ธฐ

๋ชฉํ‘œ : present,push,pop์„ ์ด์šฉํ•ด ํ™”๋ฉด์ „ํ™˜ ๋ฐ ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๊ธฐ

๊ตฌํ˜„ ๊ฒฐ๊ณผ๋ฌผ
แ„Œแ…ฅแ†ซแ„Žแ…ฆ แ„‘แ…ณแ†ฏแ„…แ…ฉแ„‹แ…ฎ

๋ฉ”์ธ ํ™”๋ฉด -- (present) -> ๋กœ๊ทธ์ธ๋ทฐ

๋กœ๊ทธ์ธ๋ทฐ -- (push) --> ํšŒ์›๊ฐ€์ž… ๋ทฐ

๋กœ๊ทธ์ธ ๋ทฐ์—์„œ ๋กœ๊ทธ์ธ -- (dismiss) --> ๋ฉ”์ธ์— ๋ฐ์ดํ„ฐ ์ „๋‹ฌ


ํ™”๋ฉด Present๋กœ ๋ชจ๋‹ฌ ๋„์šฐ๊ธฐ

present๋กœ ๋ชจ๋‹ฌ์„ ๋„์šฐ๋Š” ๋ฐฉ์‹์€, ๋ณดํ†ต ์•ฑ UI๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ํ˜„์žฌ ๋ณด๊ณ ์žˆ๋Š” ๋‚ด์šฉ์—์„œ ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ๊นŠ์ด๊ฐ€ ๊นŠ์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ๋ณด์—ฌ์ค„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ์•ฑ์„ ์„ค๊ณ„ํ•  ๋•Œ, modal๋กœ ์ฒ˜๋ฆฌํ• ์ง€ push ๋กœ ์ฒ˜๋ฆฌํ• ์ง€๋Š” ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋„ ์ค‘์š”ํ•œ ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์•ฑ์„ ๋ณด๋ฉด์„œ ์ƒ๊ฐ์„ ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค!!

(์ „์ฒด์ฝ”๋“œ)

    @IBAction func loginButtonClicked(_ sender: Any) {

        

        guard let loginVC = self.storyboard?.instantiateViewController(identifier: "loginNavi") else {return}

        loginVC.modalPresentationStyle = .fullScreen

        self.present(loginVC, animated: true, completion: nil)
        
    }
guard let loginVC = self.storyboard?.instantiateViewController(identifier: "loginNavi") else {return}

ํ˜„์žฌ ๊ฐ™์€ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์ค‘์—์„œ "loginNavi"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์„ ์–ธํ•œ๋‹ค!!

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2020-10-16 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 11 37 34

ํ˜„์žฌ ์Šคํ† ๋ฆฌ ๋ณด๋“œ ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ์—์„œ ๋กœ๊ทธ์ธํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2020-10-16 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 11 38 19

์ด๋ ‡๊ฒŒ loginNavi ์Šคํ† ๋ฆฌ๋ณด๋“œ ID๋ฅผ ๊ฐ€์ง„ navigation Controller๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค!

loginVC.modalPresentationStyle = .fullScreen

modal์„ ๋„์šธ ๋•Œ ์ „์ฒด๋กœ ๋„์šฐ๊ธฐ ์œ„ํ•ด์„œ .fullscreen ์„ ์‚ฌ์šฉํ•˜๊ณ ,

self.present(loginVC, animated: true, completion: nil)

์„ค์ •ํ•ด๋‘” VC๋ฅผ present ๋ฅผ ์ด์šฉํ•ด ํ™”๋ฉด์„ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค


ํ™”๋ฉด push ํ•˜๊ธฐ

push ๋Š” ๋„ค๋น„๊ฒŒ์ด์…˜์„ ํ™œ์šฉํ•ด stack ํ˜•ํƒœ๋กœ ๋ทฐ๋ฅผ ์Œ“์•„๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2020-10-16 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 11 41 00

๋‹ค์Œ ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜๋˜๋ฉด ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์Œ“์ด๊ณ  pop์„ ํ•˜๊ฒŒ๋˜๋ฉด ํ˜„์žฌ ๋ทฐ์ปจ์ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜๊ณ , ์ด์ „ ํ™”๋ฉด์ด ๋ณด์ด๊ฒŒ ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์šฐ์„  ์•„๊นŒ present๋ฅผ ํ• ๋•Œ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์„ ์–ธํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ

        guard let signupVC = self.storyboard?.instantiateViewController(identifier: "SignupViewController" ) as? SignupViewController else {return}

๋‹ค์Œ๊ณผ ๊ฐ™์ด SignupViewController ๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ทฐ์ปจ์„ ์„ ์–ธํ•˜๊ณ 

self.navigationController?.pushViewController(signupVC, animated: true)

push ๋ฅผ ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ๋„˜์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!!

๋’ค๋กœ๊ฐ€๋Š” pop์€

self.navigationController?.popViewController(animated: true)

์ด๋ฏธ ์Šคํƒ์— ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์Œ“์ธ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ƒˆ๋กœ์šด ๋ทฐ์ปจ์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ„๋‹จํ•˜๊ฒŒ pop์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!!


dismiss ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๊ธฐ

ํ˜„์žฌ ๊ตฌ์กฐ๊ฐ€ ๋ฉ”์ธ -> ๋กœ๊ทธ์ธ ๋ทฐ๋กœ present ๋˜์–ด์žˆ๋Š” ์ƒํƒœ๊ณ , dismiss ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์—์„œ๋Š” ์ง์ ‘

        guard let signupVC = self.storyboard?.instantiateViewController(identifier: "SignupViewController" ) as? SignupViewController else {return}
        
        signupVC.a = "๋ฐ์ดํ„ฐ ๋„ฃ์„๊ฒŒ์—ฌ"
        
        self.navigationController?.pushViewController(signupVC, animated: true)

์ด๋Ÿฐ์‹์œผ๋กœ ์ง์ ‘ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์€ push ๋‚˜ present ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ• ๋‹นํ•ด์„œ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, dismiss ๋‚˜ pop ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ด๋ฏธ ์ƒ์„ฑ๋œ ๋ทฐ์ปจ ์œ„, ํ˜น์€ stack ์—๋‹ค๊ฐ€ ์Œ“์•„๋‘๊ณ  ์ƒˆ๋กœ์šด ๋ทฐ์ปจ์„ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋ผ ์œ„ ๋‚ด์šฉ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

๋ฐฉ๋ฒ•์€ ์ด 4๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ

  1. ํ”„๋กœํผํ‹ฐ์™€ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. Delegation ํ™œ์šฉํ•˜๊ธฐ
  3. Closure ํ™œ์šฉํ•˜๊ธฐ
  4. NotificationCenter ํ™œ์šฉํ•˜๊ธฐ

์šฐ์„ ์€ NotificationCenter๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด๋ฒˆ ๊ณผ์ œ์—์„œ๋Š” ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค โ€ผ๏ธ ๋‚˜๋จธ์ง€๋Š” ์ฐจ์ฐจ ์„ค๋ช…ํ• ๊ฒŒ์š” ^^,,,

NotificationCenter๋ผ๋Š” ๊ฒƒ์€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์€ ๋ทฐ์ปจ๋“ค ์‚ฌ์ด์—์„œ ์‹ ํ˜ธ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ๋ฐ,

ํ•œ ๋ทฐ์ปจ์—์„œ๋Š” ์‹ ํ˜ธ๋ฅผ post ํ•˜๊ณ , ๋ฐ›๋Š” ๋ทฐ์ปจ์—์„œ๋Š” ๋ฏธ๋ฆฌ observer๋ฅผ ๋‹ฌ์•„๋‘์–ด์„œ ์‹ ํ˜ธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋Œ€๊ธฐํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹น

(ํ•˜๋‚˜์˜ ๋ฐฉ์†ก๊ตญ ๊ฐœ๋…!!)

๊ทธ๋ž˜์„œ ์ €๋Š” ์ด๋ฒˆ ๋กœ๊ทธ์ธ ๋ทฐ์ปจ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ post ํ•˜๊ณ , ๋ฉ”์ธ์—์„œ observer๋ฅผ ๋‹ฌ์•„๋‘ฌ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค

(๋กœ๊ทธ์ธ๋ทฐ ์ „์ฒด์ฝ”๋“œ)

import UIKit

class LoginViewController: UIViewController {

    
    @IBOutlet weak var partTextField: UITextField!
    
    @IBOutlet weak var nameTextField: UITextField!
    
    
    var personalInfo : [String] = []
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

    }
    

    @IBAction func loginButtonClicked(_ sender: Any) {
        
        
        
        self.personalInfo.append(partTextField.text ?? "")
        self.personalInfo.append(nameTextField.text ?? "")
        
        
        NotificationCenter.default.post(name: NSNotification.Name("dataReceived"), object: self.personalInfo)
        
        dismiss(animated: true, completion: nil)
    }
    
    
    @IBAction func signupButtonClicked(_ sender: Any) {
        
        guard let signupVC = self.storyboard?.instantiateViewController(identifier: "SignupViewController" ) as? SignupViewController else {return}
        
        
        
        self.navigationController?.pushViewController(signupVC, animated: true)
    }
    

}
 var personalInfo : [String] = []

์šฐ์„  ํ•ด๋‹น ๋ทฐ์ปจ ํด๋ž˜์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  personalInfo ๋ผ๋Š” ์ŠคํŠธ๋ง ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋‘์–ด์„œ ์—ฌ๊ธฐ์— ํŒŒํŠธ/์ด๋ฆ„์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค

        self.personalInfo.append(partTextField.text ?? "")
        self.personalInfo.append(nameTextField.text ?? "")

๊ทธ ๋‹ค์Œ personalInfo ๋ฆฌ์ŠคํŠธ์— ํ˜„์žฌ ํ…์ŠคํŠธ ํ•„๋“œ์— ์žˆ๋Š” ๋‚ด์šฉ์„ append ํ•ด์ฃผ๊ณ ,

        NotificationCenter.default.post(name: NSNotification.Name("dataReceived"), object: self.personalInfo)

NotificationCenter ์—๋‹ค๊ฐ€ dataReceived ๋ผ๋Š” ์‹ ํ˜ธ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ , personalInfo ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ ๋ ค๋ณด๋ƒ…๋‹ˆ๋‹ค!!

๊ทธ ๋‹ค์Œ ์ด์ œ ํ™ˆ ํ™”๋ฉด์„ ๋ณด๋ฉด์€ ์šฐ์„  ์ „์ฒด์ฝ”๋“œ ๋ถ€ํ„ฐ,,, (๋”ฐ๋กœ ์ •๋ฆฌํ•˜์ง€๋Š” ์•Š์€๊ฑฐ๋ผ ๊ฐ€๋…์„ฑ์€ ๋–จ์–ด ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ^_^)

import UIKit

class ViewController: UIViewController {
    
    
    @IBOutlet weak var partTitleLabel: UILabel!
    
    @IBOutlet weak var partLabel: UILabel!
    
    @IBOutlet weak var welcomeMessageLabel: UILabel!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        addObserver()
        
        
        self.partTitleLabel.isHidden = true
        self.partLabel.isHidden = true
        self.welcomeMessageLabel.isHidden = true
    
    }
    
    
    
    func addObserver()
    {
        NotificationCenter.default.addObserver(self, selector: #selector(settingLabel), name: NSNotification.Name("dataReceived"), object:  nil)
    }

    @objc func settingLabel(_ noti : NSNotification)
    {
        let dataList = noti.object as? [String] ?? []
        
        self.partTitleLabel.isHidden = false
        self.partLabel.isHidden = false
        self.welcomeMessageLabel.isHidden = false
        
        self.partLabel.text = dataList[0]
        self.welcomeMessageLabel.text = "\(dataList[1]) ๋‹˜ ์•ˆ๋…•ํ•˜์„ธ์—ฌ ^~^"
    }
    

    @IBAction func loginButtonClicked(_ sender: Any) {

        

        guard let loginVC = self.storyboard?.instantiateViewController(identifier: "loginNavi") else {return}

        loginVC.modalPresentationStyle = .fullScreen

        self.present(loginVC, animated: true, completion: nil)
        
    }
    
}
    func addObserver()
    {
        NotificationCenter.default.addObserver(self, selector: #selector(settingLabel), name: NSNotification.Name("dataReceived"), object:  nil)
    }

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฏธ๋ฆฌ dataReceived ๋ผ๋Š” ์‹ ํ˜ธ ์ด๋ฆ„์„ ์ˆ˜์‹  ํ•  ์ˆ˜ ์žˆ๋Š” NotificationCenter ํ™œ์šฉํ•ด์„œ observer๋ฅผ ๋งŒ๋“ค์–ด ๋‘์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์˜ฌ๋ ค๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น dataReceived ๋ผ๋Š” ์‹ ํ˜ธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด settingLabel ์ด๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค!!

    @objc func settingLabel(_ noti : NSNotification)
    {
        let dataList = noti.object as? [String] ?? []
        
        self.partTitleLabel.isHidden = false
        self.partLabel.isHidden = false
        self.welcomeMessageLabel.isHidden = false
        
        self.partLabel.text = dataList[0]
        self.welcomeMessageLabel.text = "\(dataList[1]) ๋‹˜ ์•ˆ๋…•ํ•˜์„ธ์—ฌ ^~^"
    }

settingLabel ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ํ•ด๋‹น noti๋ฅผ [String] ํ˜•ํƒœ๋กœ ํƒ€์ž…์„ ์ •ํ•ด์ฃผ๊ณ , ์ˆจ๊ฒจ๋’€๋˜ ๋ผ๋ฒจ์„

        self.partTitleLabel.isHidden = false
        self.partLabel.isHidden = false
        self.welcomeMessageLabel.isHidden = false

๋ณด์ด๊ฒŒ ํ•œ๋‹ค์Œ์—

        self.partLabel.text = dataList[0]
        self.welcomeMessageLabel.text = "\(dataList[1]) ๋‹˜ ์•ˆ๋…•ํ•˜์„ธ์—ฌ ^~^"

๋ผ๋ฒจ ํ…์ŠคํŠธ๋ฅผ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค์•„~~~~

์ด ๋ฐฉ๋ฒ• ๋ง๊ณ ๋„ ์œ„์— ์„ค๋ช…ํ•œ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๋” ์žˆ๋Š”๋ฐ์š”! ๋‹ค์Œ์— ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ^_^