A๋ผ๋ ๋ทฐ ์ปจํธ๋กค์์ B๋ผ๋ ๋ทฐ ์ปจํธ๋กค๋ก ์ด๋ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ค์ผ ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ด ๋ ์ธ ์ ์๋ ๋ฐฉ๋ฒ์ด ์คํ ๋ฆฌ๋ณด๋๋ผ๋ฉด segue๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ B์ ํ๋กํผํฐ๋ฅผ ๋ง๋ค์ด ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ์ A <- B ์ฒ๋ผ ํ์ฌ ๋ณด์ด๋ ํ๋ฉด์ด ์ฌ๋ผ์ง๊ณ ๋ทฐ๋ฅผ ๋ณด์ฌ์ง๊ฒ ํ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก ๋ค์ ์ ๋ฌํด์ผ ํ ๋ delegate ํจํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Backward passing data ํ ์ ์๋๋ก view๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ํด ํ๋กํ ์ฝ ์์ฑ๊ณผ ์ฑํ๊น์ง ์ด๋ฒ ํฌ์คํ ์์ ๋ค๋ค ๋ณด๊ฒ ์ต๋๋ค~
๋๋ฆฌ์๋ ์์์๋ผ๊ณ ๋ ํ๋ฉฐ ์์์์์ ์์ ์์ ์ ์๋ ํจ์๋ฅผ ์คํ ํ ์ ์์ต๋๋ค. ์ด๋ฆ ๊ทธ๋๋ก ์์์์๊ฒ ์์ ์ด ํ ์ผ์ ์์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค(๋ผ๊ณ ๋งํ์ง๋ง ์ฒ์์ ์ ๋ง ๋ฎ์ ๊ฐ๋ ์ด๋ผ ํ๋ค์๋ค...)
์ ์ด ๊ทธ๋ฆผ๋ง ๋ณด๋ฉด ๋ฉ๋๋ค ใ ใ
์ด๋ฒ ํ๋ก์ ํธ์์๋ ViewController์ BViewController ๋ผ๋ ๋๊ฐ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์๊ณ
ViewController ์์ BViewController ๋ฅผ ๋์ ์ค๋ค
BViewController ์์ ์ ๋ ฅํ ๊ฐ์ ViewController ์์ ๋ณผ ์ ์๋๋ก ํ๋ ๊ฒ์ด ๋ชฉํ ์ ๋๋ค.
๋ง ๊ทธ๋๋ก ๋ค๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ!@
์ด๋ ํ์ํ ๊ฒ์ ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ๋๋ค!
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ํด
1. ํ๋กํ ์ฝ์ ๋ง๋ญ๋๋ค
ํ๋กํ ์ฝ์ ์๋ฐ์์ implementation๊ณผ ๋น์ทํ๊ฒ ๊ตฌํํด ์ค์ผ ํ๋ ํ์์ ์ง์ ํ๋ ๋ฉ๋ด์ผ ๊ฐ์ ๊ฒ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋์
๋ฐ๋ผ์ BViewController๋ ํํ๋ฅผ ๋ง๋ค๊ณ ๊ทธ๊ฑธ ViewController ์์ ๊ตฌํํด ์ฃผ๋๋ก ํ ๊ฑฐ์์
์ด๋ BViewController ๋ delegate๋ผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋๋ค
2. deleage
์ด ๊ฐ์ฒด์ ViewContrller์์ ์์ (self) ๋ฅผ delegate ์ ์ง์ ํด์ค๋๋ค
๊ทธ๋ ๊ฒ ๋๋ฉด BViewController ๋ delegate ๊ฐ์ฒด๋ก ViewController์ delegate๋ฅผ ์ํ ํจ์๋ฅผ ์คํ ํ ์ ์๋ ๊ฒ์ ๋๋ค!!
์ ๊ทธ๋ฌ๋ฉด ์ด์ ์์ !
BViewController ์ ๋ทฐ ๊ตฌ์ฑํ๊ธฐ
์ฐ์ ์ค์ํํธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์คํํด ์ฃผ์ธ์
ํ๋ก์ ํธ ๋ง๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํ ๋์ด ์๋ ๊ณณ์์ ์์ํฉ๋๋ค.
BViewController.swift ์ BViewController.xib๋ฅผ ์์ฑํด ์ค๋๋ค.
์ด์ xib์ ๋ทฐ๋ฅผ ์ฐ๊ฒฐํด ์ค์ผ ํฉ๋๋ค.
BViewControlelr.xib๋ฅผ ๋๋ธํด๋ฆญ์์ ์ฐฝ์ ๋์ด๋ค
BViewController.xib์ ์๋จ์ ์๋
File's Owner ํด๋ฆญ
๊ฐ์ฅ ์ค๋ฅธ ์ชฝ์ ์๋ connection inspector ํด๋ฆญ
์ ๊ธฐ view - xview O์ด๋ ๊ฒ ๋์ด ์๋ ๊ณณ์์ O ๋ถ๋ถ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋๊ทธ๋ผ๋ฏธ๋ฅผ ๋๋๊ทธ ํด์
๊ณ์ธต ๊ตฌ์กฐ ์ ์ผ ์๋จ
View์ ๋จ๊ถ ์ค๋๋ค
๊ทธ ํ์
File's Owner ๋ค์ ํด๋ฆญ
Attributes Inspector ์์ ์ปค์คํ ํด๋์ค๋ฅผ
์ด์ด์ค ํด๋์ค ๋ช ์ผ๋ก ์ง์ ํด ์ค๋๋ค
์ปค๋ฉํธ + ์ฌํํธ + L์ ๋๋ฌ์ UILabel๊ณผ textField๋ฅผ view ์ ๋ฃ์ด ์ค๋๋ค.
@IBOutlet weak var nameTextField: UITextField!
ํ ์คํธ ํ๋๋ง BViewController ์์ IBOutlet์ผ๋ก ์ด์ด์ค๋๋ค
BViewController ์ UITextFieldDelegate ๋ฅผ ์ฑํํด ์ค๋๋ค
class BViewController: UIViewController, UITextFieldDelegate{
// (์๋ต)
}
์ ์ด์ BViewController ์ ๋ทฐ ์์ ์ ๋๋ฌ์ต๋๋ค. ์ด์ ์ด ํฌ์คํ ์ ํต์ฌ์ธ
ํ๋กํ ์ฝ์ ๊ตฌํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค~
ํ๋กํ ์ฝ์ ๊ตฌํํด ์ค๋๋ค.
protocol BViewControllerDelegate {
func updateLabel(_ name: String)
}
BViewControllerDelegate๋ฅผ ์ฑํํ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ updateLabel(_:) ์ด๋ผ๋ ํจ์๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค
์ด์ BViewController ์ delegate ํ๋กํผํฐ๋ฅผ ํ๋ ์์ฑํฉ๋๋ค.
var delegate: BViewControllerDelegate?
์ด delegate ํ๋กํผํฐ๋ก BViewControllerDelegate๋ฅผ ๊ตฌํํ ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ๋ธ๋ฆฌ๊ฒ์ดํธ์ ์ ์๋ ํจ์์ ์ ๊ทผ ํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋กํ ์ฝ์ ๊ตฌํํ์ผ๋ฉด ์๋์ ๊ฐ์ด ๋์์ ์ํ ์ฝ๋๋ฅผ ์์ฑํด ์ค๋๋ค.
import UIKit
protocol BViewControllerDelegate {
func updateLabel(_ name: String)
}
class BViewController: UIViewController, UITextFieldDelegate{
@IBOutlet weak var nameTextField: UITextField!
var delegate: BViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
let backButton = UIButton()
backButton.addTarget(self, action: #selector(popViewController), for: .touchUpInside)
backButton.setImage(UIImage(systemName: "chevron.backward"), for: .normal)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton)
nameTextField.delegate = self
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if (nameTextField.text != "") {
delegate?.updateLabel(nameTextField.text ?? "")
nameTextField.resignFirstResponder()
}
return true
}
@objc func popViewController() {
self.dismiss(animated: true, completion: nil)
}
}
viewDidLoad ์์๋ ๋ค๋น๊ฒ์ด์ ์ ๋ค์ด๊ฐ ๋ฒํผ๊ณผ
ํ ์คํธ ํ๋์ ๋์์ ์ํด ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ฐ์ฒด์ self๋ฅผ ์ง์ ํด์ค๋๋ค.
์ด๋ฆ์์ ์ ์ ์๋ฏ์ด UITextFieldDelegate ๋ํ ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด!
textFieldShouldReturn(_:) ์ ํค๋ณด๋(๋ธ๋ฃจํฌ์ค ํค๋ณด๋ ํฌํจ)์ ์ํฐ(๋ฆฌํดํค)๋ฅผ ๋๋ ์ ๋ ํธ์ถ๋๋ ํจ์ ์ ๋๋ค.
๋ง์ฝ ํ ์คํธ ํ๋์ ํ ์คํธ๊ฐ ๋น๊ฐ์ด ์๋๋ผ๋ฉด("")
๋ธ๋ฆฌ๊ฒ์ดํธ๋ก ์ง์ ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ๊ตฌํ๋ updateLabel(_)์ ํธ์ถํด์ ํ ์คํธ ํ๋์ ์ ๋ ฅ๋ ํ ์คํธ๋ฅผ ์ ๋ฌํด ์ค๋๋ค.
๊ทธ ํ์ ํ ์คํธ ํ๋์ firstResponder๋ฅผ resign ์์ผ ์ค๋๋ค.
์ด์ BViewControllerDelegate ๋ฅผ ์ฑํํ๋ ViewController ๋ฅผ ๊ตฌํํ๊ฒ ์ต๋๋ค.
๋ผ๋ฒจ๊ณผ ๋ฒํผ์ ํ๋์ฉ ๋ฐฐ์นํด ์ค๋๋ค.
๋ฒํผ์ BViewController ๋ฅผ ํ๋ฉด์ Present ํด์ค ๋ฒํผ์ด๊ณ
๋ผ๋ฒจ์ BViewController ์ ํ ์จํธ ํ๋์์ ์ ๋ ฅ๋ ํ ์คํธ๊ฐ ๋ณด์ฌ์ง ๋ผ๋ฒจ์ ๋๋ค.
๊ฐ๊ฐ IBOutlet์ ์ด์ด์ฃผ์ธ์
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var pushViewButton: UIButton!
์ฝ๋๋ฅผ ์์ฑํด ์ค๋๋ค. ์ฐ์ BViewControllerDelegate๋ฅผ ์ฑํํด ์ฃผ์ธ์
class ViewController: UIViewController, BViewControllerDelegate{
}
override func viewDidLoad() {
super.viewDidLoad()
pushViewButton.addTarget(self, action: #selector(pushBViewcontroller), for:.touchUpInside)
}
๋ฒํผ์ addTarget์ ์ง์ ํด ์ค๋๋ค.
pushBViewController() ๋ BViewController ๋ฅผ present ํ๋ํจ์ ์ ๋๋ค.
@objc func pushBViewcontroller() {
let bViewController = BViewController()
bViewController.delegate = self
let navigationController = UINavigationController(rootViewController: bViewController)
navigationController.modalPresentationStyle = .fullScreen
self.present(navigationController, animated: false, completion: nil)
}
BViewController์ delegate์ self๋ก ์์ ์ ์ง์ ํด์ค๋๋ค.
delegate๋ก ์ด์ด์ ธ ViewController๋ BViewControllerDelegate ์์ ์ง์ ๋ ํจ์๋ฅผ ๊ตฌํํ๊ณ
BViewController๋ delegate๋ฅผ ํตํด ViewController์์ ๊ตฌํ๋ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
func updateLabel(_ name: String) {
nameLabel.text = name
}
๋ง์ง๋ง์ผ๋ก updateLabel(_:)์ ๊ตฌํํด ์ค๋๋ค
์ด์ ๋น๋ํ๊ณ ์ฝ๋๋ฅผ ์คํํด ์ฃผ๋ฉด
ํ๋ฆฌ๊ฑฐ๋ ์ด์ํ ์ ์ด ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค
์ฐธ๊ณ ์ฌ์ดํธ:
learnappmaking.com/pass-data-between-view-controllers-swift-how-to/#back-delegation
Pass Data Between View Controllers – LearnAppMaking
When your app has multiple User Interfaces, you'll want to move data from one UI to the next. How do you pass data between view controllers in Swift?
learnappmaking.com
'๐ iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SF Symbol ๋ค์ด๋ก๋ ๋ฐ๊ธฐ xCode (0) | 2021.05.12 |
---|---|
[Swift] PhotoKit ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ (1) | 2021.04.02 |
[Swift] UIButton ๋ฒํผ ๋๋ฌ์ ํจ์ ํธ์ถ addTarget (์ฒ์ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ) (1) | 2021.03.23 |
[Swift]UITableViewDataSourcePrefetching ํ ์ด๋ธ ๋ทฐ์ ์ ๋ฐ์ดํฐ ๋ฏธ๋ฆฌ ๋ก๋ ์ํค๊ธฐ (0) | 2021.03.19 |
[Swift] Storyboard ์์ด Swift ํ๋ก์ ํธ ์์ํ๊ธฐ (0) | 2021.03.03 |
๋๊ธ