TableView๋ TextField์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ๊ฐ๋ tableView.delegate = self ๋ฅผ ์ ์ด์ฃผ์ง ์์ ๋์์ด ์๋ ๋๊ฐ ์์๋ค.
๋งค๋ฒ ์ต๊ด์ ์ผ๋ก ์ด ์ฝ๋๋ฅผ ์ ์ด์ฃผ์์ง๋ง ์ ์ด๊ฑธ ์ ์ด์ผ ํ๋์ง ์์๋ณด๊ณ ์ ํ๋ค.
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ด๋?
์ด๋ฆ ๊ทธ๋๋ก ์์ํ๋ค ๋ผ๋ ์๋ฏธ์ด๋ค. ์ฆ ์์์๋ฅผ ๊ฐ๊ณ ์๋ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์์ ์ ์ผ์ ์์ํ๋ ํํ์ ๋์์ธ ํจํด์ผ๋ก ๊ฐ์ฒด์ ๊ฐ์ฒด๊ฐ์ ๋ํ๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
class ViewController: UITableViewDelegate {
func tableViewFunction() {
print("tableview ์ฒซ๋ฒ์งธ ํจ์ ์คํ")
}
// ์คํ๋ถ
let tableView = UITableView()
tableView.delegate = self // self ๋๋ ์์๋ฐ์ VC ํ ๋น (๋ณดํต viewDidLoad์ ์ ๊ฑฐ๋ ์คํ ๋ฆฌ๋ณด๋๋ก ์ฐ๊ฒฐ)
tableView.reload() // ์ํ๋ ๋ถ๋ถ์์ ์ฌ์ฉ
}
์ค์ tableView๋ฅผ ์ฌ์ฉํ ๋ ์ ์ฝ๋์ ๊ฐ์ ๋ถ๋ถ์ ๊ตฌํํด์ ์ฌ์ฉํ๋ค.
ํ์ง๋ง ์ค์ ๋ก ์ฑํํ ํ๋กํ ์ฝ ๋ถ๋ถ๊ณผ ๊ตฌํ๋ถ๋ ๋ฐ๋ก ์กด์ฌํ๋ค.
protocol UITableViewDelegate {
func tableViewFunction()
}
class UITableView {
var delegate: UITableViewDelegate?
func reload() {
delegate?.reload() // ๋ด๋ถ ๊ตฌํ์ ์ ์ ์์
...
}
}
์ด์ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ฝ๋๊ฐ ์ง์ฌ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. (์ค์ ๋ก๋ ์ด์ ๊ฐ์ด ์ง์ฌ์์ง ์๋ค.)
tableView์๋ delegate๋ผ๋ ๋ณ์์ UITableViewDelegate()๊ฐ ์ ์ฅ๋์ด ์์ด ViewController์์ delegate๋ฅผ ์์ ์ VC๋ก ์ ์ฅํด์ผ ์ด ๋ถ๋ถ์ ์คํํ ์ ์๋ค.
๋ฐ๋ผ์ ์ UITableView ํด๋์ค์ delegate์ ํ ๋นํ ๋์ ViewController๊ฐ ์ ๋ฌ๋์ด ์ฐ๋ฆฌ๊ฐ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ถ๊ฐ์ ์ผ๋ก ๋๋ฒ์งธํ๋ฉด์์ ์ฒซ๋ฒ์งธ ํ๋ฉด์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฑ ์ด๋ค ํ๋์ ํ๊ณ ์ถ์๋ ์ด์ ๊ฐ์ ํจํด์ ์ฌ์ฉํ ์ ์๋ค.
protocol ReloadDelegate {
func reload()
}
class FirstVC: ReloadDelegate {
func reload() {
print("start reload")
}
// ์คํ๋ถ
let secondVC = SecondVC() // ๋ณ์ ์ ์ธ
secoondVC.delegate = self // viewDidLoad์ ์ ์ด์ค
secondVC.doSomething() // ์ํ๋ ๋ถ๋ถ์์ ์ด์๊ฐ์ด ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ
}
class SecondVC {
var delegate: ReloadDelegate?
func doSomething() {
delegate?.reload()
}
}
์ ์์ ๋ SecondVC์ ํด๋์ค์์ doSomething ํจ์์ delegate?.reload() ๊ฐ ์คํ๋์์ ๋ FirstVC์ reload๋ถ๋ถ์ด ์คํ๋๋ ์์ ์ด๋ค.
tableView๋ฅผ ์ฌ์ฉํ ๋์ ๋น์ทํ์ง๋ง ์กฐ๊ธ ๋ค๋ฅธ ๋ถ๋ถ์ SecondVC์ ๊ตฌํํ ๋ถ๋ถ๊ณผ ๊ฐ์ด delegate์ ์ค์ ๊ตฌํ ๋ถ๋ถ์ ์ง์ ๊ตฌํํด์ผ ํ๋ค๋ ์ฐจ์ด๊ฐ ์๋ค. (tableView๋ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ๊ณต๊ฐ๋์ด ์์ง ์๊ณ ์ฌ์ฉ๋ง ๊ฐ๋ฅํ๋ค.)
์ ์์ ๋ ๋๋ฒ์งธ ํ๋ฉด์์ ์ฒซ๋ฒ์งธ ํ๋ฉด์ reload()ํ๋ ์์ ์์ง๋ง, ๋คํธ์ํฌ ํต์ ์ ์ฑ๊ณต/์คํจ ์ฌ๋ถ์ ๋ฐ๋ฅธ ํจ์ ์คํ, ๋๋ฒ์งธ ํ๋ฉด์์ ์ฒซ๋ฒ์งธ ํ๋ฉด์ผ๋ก ๋์๊ฐ ํ ๋ฐ๋ก ๋ ๋ค๋ฅธ ์ธ๋ฒ์งธ ํ๋ฉด์ ๋ํ๋ด์ด์ฃผ๋ ๋ฑ .. ๊ณผ ๊ฐ์ ์์ ๋ก ๋ค์ํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
ํ๋ฉด๊ณผ์ ์ ํ์์ ์์ฃผ ์ฌ์ฉํ๊ธด ํ๋๋ฐ, class๊ฐ์๋ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ๋ฐ์ ์์๊น?
๋ทฐ ์ปจํธ๋กค๋ฌ์๊ฒ ์ํฉ์ ๋ํ ํ๋จ(๋์)์ ์์์ด ๊ฐ๋ฅํ๋ค.
๋ํ ๊ฐ์ฒด๊ฐ ์๋ฐฉํฅ ์ปค๋ฎค๋์ผ์ด์ ์ด ๊ฐ๋ฅํด์ง๋ค. (๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ๋ ๊ฐ๋ฅ) ex) ๋ฆฌํด๊ฐ์ ๋ฐ๋ผ ํ ์คํธ ํ๋๋ ๋์ํ ์ง ๋ง์ง ํ๋จ
๊ทธ๋ฆฌ๊ณ ํ ์คํธํ๋์ ๋ด๋ถ ๊ตฌํ์ ์จ๊ธธ ์ ์๋ค.
์ด๋ฐ ์ด์ ๋ค๋ก ์ ํ์ด ํ๋กํ ์ฝ์ ์ด์ฉํ ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ฌ์ฉํ๋๊ฒ ๊ฐ์ ์๊ฐ์ด ๋ ๋ค.
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] ์ฝ๋๋ก ํ๋ฉด ๊ตฌ์ฑํ๊ธฐ (0) | 2023.04.20 |
---|---|
[iOS] xcode Vary for Traits (0) | 2023.03.28 |
[iOS] OAuth Login firebase์ ์ฐ๋ํ๋ฉด์ ์๊ฒ๋ ์ (Apple, Google, Email, Kakao) (0) | 2022.12.23 |
[iOS] ๋์์ฑ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ (Concurrency Problems) (0) | 2022.12.16 |
[iOS] ๋์คํจ์น ๊ทธ๋ฃน(Dispatch Group) (0) | 2022.12.13 |