Delegate ํจํด์ผ๋ก ์ด์ ํ๋ฉด์ ๊ฐ ์ ๋ฌํ๊ธฐ
์ด์ ํ๋ฉด์ผ๋ก ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ์์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. ๊ทธ ์ค ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ฌ์ฉํ์ฌ ์ด์ ํ๋ฉด์ผ๋ก ๊ฐ์ ๋๊ธฐ๋ ๋ถ๋ถ์ ๊ณต๋ถํ๋ค.
์ต๋ํ ๊ฐ๋จํ๊ฒ ์์ ๋ฅผ ๋ง๋ค์ด๋ณด์๋ค. ๋ฐ์ดํฐ ์ ๋ฌ ์ด์ธ์ ๋ถ๋ถ์ ์ค๋ช
์๋ต...
๋์ํ๋ฉด
File ๊ตฌ์ฑ
- BeforeVC.swift
- AfterVC.swift
- ProtocolDelegate
์ด๋ ๊ฒ ๋๊ฐ์ Scene๊ณผ VeiwController ๋ฅผ ๋ง๋ค์ด์ค๋ค.
Button, Textfiled, Label๋ฑ์ ๊ตฌ์ฑํด์ฃผ๊ณ , IBOultet์ ์ฐ๊ฒฐํด์ค๋ค.
1. ํ๋กํ ์ฝ ์ ์ํ๊ธฐ
์๋ก์ด ํ์ผ์ ํ๋ ๋ง๋ค์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋กํ ์ฝ์ ์ ์ํ๋๋ฐ, ํ๋กํ ์ฝ์ ๋ฉ์๋์ ํ๋กํ ํ์
๋ง ์ ๊ณ ๋ด๋ถ ๋์์ฝ๋๋ ์ ์ง ์๋๋ค.
DelegateProtocol.swift
import UIKit
protocol SendData {
func send(_ vc: UIViewController, Input value : String?)
}
2. AfterVC์์ ํ๋กํ ์ฝ ํ์
์ ๋ณ์ ๋ง๋ค์ด์ฃผ๊ธฐ
AfterVC.swift
import UIKit
class AfterViewController: UIViewController {
var delegate : SendData? // SendData ํ์
์ ๋ณ์์์ฑ
@IBOutlet weak var inputField: UITextField!
@IBAction func ChangeBtn(_ sender: Any) {
delegate?.send(self, Input: inputField.text)
// SendData ํ๋กํ ์ฝ์ ์๋ send๋ฉ์๋ ์ฌ์ฉ
self.presentingViewController?.dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
3. BeforeVC์์ ํ๋กํ ์ฝ ์ฑํํ๊ณ ๋ฉ์๋ ๊ตฌํํ๊ธฐ
BeforeVC.swift
import UIKit
class BeforeViewController: UIViewController {
@IBOutlet weak var valueLabel: UILabel!
@IBAction func valueChangeBtn(_ sender: Any) {
guard let AfterVC = self.storyboard?.instantiateViewController(withIdentifier: "AfterVC") as? AfterViewController else{return}
AfterVC.delegate = self // AfterVC์์ ์์ฑํ delegate๋ผ๋ ๋ณ์๋ฅผ ํตํด์ ๋ธ๋ฆฌ๊ฒ์ดํธ ์ง์ .
AfterVC.modalPresentationStyle = .fullScreen
present(AfterVC, animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension BeforeViewController: SendData {
func send(_ vc: UIViewController, Input value: String?) {
valueLabel.text = value
}
}
2 ์์ AfterVC์ delegate๋ผ๋ ๋ณ์๋ฅผ ์์ฑํ๊ณ ํ๋กํ ์ฝ์ ํ์
์ผ๋ก ์ ์ธํ๋ค. ๊ทธ ๋ณ์๋ฅผ ํตํด์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ง์ ํ๊ฒ ๋๋ค.AfterVC.deleaget = self
์ฆ, AfterVC์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ BeforeVC(self)๊ฐ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋กํ ์ฝ์ ์ ์ํ ๋ ํจ์๋ฅผ ๊ตฌํํ์ง ์์๊ธฐ๋๋ฌธ์ ์ฌ๊ธฐ์ ๊ตฌํํด์ฃผ๋ฉด ๋๋ค.
extension BeforeViewController: SendData {
func send(_ vc: UIViewController, Input value: String?) {
valueLabel.text = value
}
}
์์ค์ฝ๋
https://github.com/Youjunyong/ios_practice.git
#2๋ฒ ํด๋์ ํ๋ก์ ํธ์ ์ฝ๋๊ฐ ์๋ค.
์ฌ์ฉ์์๊ฒ ์
๋ ฅ๊ฐ์ ๋ฐ์, dismiss
ํ๋ฉด ์ด์ View์์ ๊ทธ ๊ฐ์ ๋์์ค๋ค
์ฐ์ต ๋ชฉ์
- Delegateํจํด์ ํตํ์ฌ ์ด์ ํ๋ฉด์ผ๋ก ๊ฐ ์ ๋ฌ ํ๊ธฐ.
- Protocol ์ ์ง์ ์์ฑํ๊ณ , ์ด์ ViewController๋ฅผ ๋ค์ ViewController์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ก ์ง์ ํ๋ ์ฐ์ต.