์ด๋ฒ์ ์ฃผ์ ๋ Tag์ ๊ดํ์ฌ ์จ๋ณผ๊น ํ๋ค.
ํ๊ทธ๋ ์ฐธ ์ข์ ๊ธฐ๋ฅ์ธ๋ฐ, ์ฑ ์์ ์ ๋ชป๋ณด๋ค ๋ณด๋
๊ฐ๊ณผํ๋ ๊ธฐ๋ฅ์ด์๋ค.
๊ทธ๋ฌ๋ค ๋ง์ ์ฐ๋ ค๋ ๊ฐ๋ ์ด ํท๊ฐ๋ ค์
์ ๊น ์จ๋ณผ๊น ํ๋ค๊ฐ ๋ญ์ผ ํ๊ณ ๋์ค์ ์ฐพ์๋ด์ผ์ง ํ๋ค๊ฐ
๋์ค์ ๋ณ์ด๋ผ๋ ๊ฑธ๋ ธ๋, ๊ฒฐ๊ตญ ์์ฐพ์
๊ทธ๋์ ์ฐ๋ค ์์ํ ๊ฐ์ด ์์ ๋ธ๋ก๊ทธ๋ก ์จ๋ณด๋ฉด์
์ ๋ฆฌ๋ฅผ ํ๊ณ ์ ํ๋ค.
์ดํดํ๊ธฐ
์ฌ์ฉ ๋ฐฉ๋ฒ์ ๊ต์ฅํ ๋จ์ํ๋ค.
- ํ๊ทธ ๋ฒํธ ์ ๋ ฅ ( ์ ๋ ฅ์ํ ์ default : 0 )
- ์ด๋ค ํ๊ทธ๊ฐ ๋ถ์ ์ค๋ธ์ ํธ๊ฐ ํ์ํ๋ฉด ํ๊ทธ ๋ฒํธ๋ก ๊ฐ์ฒด ์์ฑํ์ฌ ์ฒ๋ฆฌ
์ฌํํ๋ค, ์๋ฅผ ๋ค์ด ์ด๋ ๊ธฐ๋ฅ์ label์ ์ถ๊ฐํ๊ณ (Tag: 1์ผ๋ก ์ง์ ํ๋ค ๊ฐ์ )
๋ค๋ฅธ ๊ณณ์์ ํ ์คํธ๋ผ๋๊ฐ, ์์ ๋ฐ๊พธ๊ณ ์ถ๋ค. ๊ทธ๋ผ ํด๋น ํ๊ทธ ๋ฒํธ๋ฅผ ๊ฐ์ง
์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ์ค์ ์ ๋ฐ๊พธ๋ฉด ๋๋ค.
๊ทธ๋ฐ๋ฐ, ์ฒ์์ ํท๊ฐ๋ฆฐ๊ฑด ์คํ๋ ค ๋๋ฌด ๋จ์ํด์์๋ค.
โ๋ ์์ ๋ทฐ์์ ํ๊ทธ ๋ฒํธ ์ง์ ํ๋ฉด ํธ์ถ์ด ๊ฐ๋ฅํ ๊น?โ
โ๊ฐ์ ๋ฒํธ ๋ฃ์ผ๋ฉด ์ด๋ป๊ฒ ๋์ง? ๋๊ฐ ํธ์ถ ๋ ๊น? ๋๋ค? ํ๋๋ง?โ
์์ด๋ฌ๋ํ๊ฒ๋ ์ด๋ฌํ ๋จ์ํจ์ ์ํด ์๊ธด ์ด๋ ค์ ๋๋ฌธ์ ์ฐ๊ธฐ ์ด๋ ค์ ๋ค.
์ฌ์ฉ๋ฒ
label๋ฅผ ์ฝ๋๋ก ์ถ๊ฐ
Button ์ StoryBoard์ ์ถ๊ฐ ๋ฐ ์ฐ๊ฒฐ
1. label๋ฅผ ์ฝ๋๋ก ์ถ๊ฐ
// ViewDidLoad
// label ์์ฑ
let label = UILabel()
// ๊ธฐ๋ณธ ์
ํ
label.frame.size = CGSize(width: 100, height: 50)
label.text = "Hello, world"
label.textColor = .black
label.center = self.view.center
// ํ๊ทธ ์ง์
label.tag = 1 // ์ค์ **
// ํ๋ฉด์ ์ถ๊ฐ
self.view.addSubview(label)
์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ๊ฑด Tag๋ฅผ ๋ฌ์์ฃผ๋๊ฒ!
๊ทธ๋ผ ์ด๋ฏธ์ง๋ ์๋์ ๊ฐ๋ค.
2. Button ์ StoryBoard์ ์ถ๊ฐ ๋ฐ ์ฐ๊ฒฐ
๋ฒํผ ์์ฑ์ ๊ฐ๋จํ๋ ์ฝ๋๋ถํฐ ๋ณด์ด์๋ฉด
@IBAction func changeText(_ sender: UIButton) {
// 1.Tag๋ก ์ง์
let label = self.view.viewWithTag(1) as! UILabel
label.text = "JS Blog!"
label.textColor = .blue
}
Tag ์ง์ ํด์ฃผ๋ ๊ณณ์ด ๊ฐ์ฅ ์ค์ํ๋ค!
self์ view๊ฐ ๊ฐ์ง ์๋ธ๋ทฐ๋ค ์ค์์ 1๋ฒ
ํ๊ทธ๋ฅผ ๊ฐ์ง ๋ทฐ๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค.
๊ทธ๋ฆฌ๊ณ UILabel
๋ก ๋ค์ด ์บ์คํ
์ ํด์ฃผ๊ณ ์ฌ์ฉํ๋ฉด ๋์ด๋ค.
์์ฃผ ์ฌํํ๋ค.
๊ฒฐ๊ณผ ํ๋ฉด
์คํ - ํท๊ฐ๋ฆฌ๋ ๊ฐ๋ ๋ฐ๋ก ์ก๊ธฐ
๋ช๊ฐ์ง ์คํ์ ํ์ฌ, ํท๊ฐ๋ฆฌ๋ ๊ฐ๋ ์ ์ก์๋ณด์
Q1. ์๋ tag ๋ฒํธ๋ฅผ ํธ์ถํ๋ฉด???
A1. nil๋ก ๋ฐํํ๋ค.
Q2. MainView์์ tag 1๋ฒ์ ๊ฐ์ง๊ณ ์ค๋ฉด ์ฑ๊ณตํ ๊น?
โ๋ ์์ ๋ทฐ์์ ํ๊ทธ ๋ฒํธ ์ง์ ํ๋ฉด ํธ์ถ์ด ๊ฐ๋ฅํ ๊น?โ
์ด๊ฑด ๋ง๋กํ๊ธฐ ์ด๋ ค์์, ํ๋ คํ๊ฒ ๊ทธ๋ ธ๋ค.
์ด๋ฌ๋ฉด ์กฐ๊ธ ๋ ์ ๋ฌ์ด ์๋๊ฒ ๊ฐ๋ค.
์คํ์ ์ํด UI๋ฅผ ๋ค์ ์ ํ ํ๋ค.
@IBOutlet weak var mainView: UIView!
@IBOutlet weak var subView: UIView!
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
label.tag = 1
}
mainView ์์ subView๊ฐ ์๊ณ , ๊ทธ ์์ tag:1์ธ label์ด ์๋ค.
์ด์ ํ์ธ ํ๊ณ ์ถ์๊ฑด ์ด๊ฒ์ด๋ค.
// Tag๋ก ์ง์
let label = mainView.viewWithTag(1) as! UILabel
label.text = "JS Blog!"
subView
์ ์๋ label
์ ํ๊ทธ ๋ฒํธ๋ฅผ ๋ ์์๋ทฐ์ธ mainView
์์ ์ฌ์ฉ์ด ๋ ๊น?
Q1์ ๋ฐ๋ฅด๋ฉด, 1 ํ๊ทธ๋ฅผ ๊ฐ์ง ์ค๋ธ์ ํธ๊ฐ ์์ผ๋ฉด nil์ ๋ฐํํ๋ค. ๊ทธ๋ ๋ด ์ด ๊ฒฝ์ฐ์? ๊ฒฐ๊ณผ๋ฅผ ๋ณด์
์์ฃผ ํฅ๋ฏธ๋ก์ด ๊ฒฐ๊ณผ๊ฐ ๋์๋ค. nil์ด ์๋๋ค ์ฑ๊ณต ํ๋ค.
๊ธ ์ฐ๊ธฐ ์ํด ํ ์คํธ๋ฅผ ํ๋ฉฐ, ์ด๊ฑด nil์ผ๊ฑฐ๋ค ๋ผ๊ณ ํ์ ์ ๊ฐ๋์ฐฌ ์์์ ํ๋ค.
๊ทธ๋ฐ๋ฐ;;;; ์๋๋ค?? ์ถฉ๊ฒฉ์ ์ด๋ค.
Q2. MainView์์ tag 1๋ฒ์ ๊ฐ์ง๊ณ ์ค๋ฉด ์ฑ๊ณตํ ๊น?
A2. ์ฑ๊ณตํ๋ค.
Q3. ๊ฐ์ Tag๊ฐ๋ค์ด ์ฌ๋ฌ๊ฐ๋ฉด?
๋ง์ฝ, 1์ ํ๊ทธ ๋ฒํธ๋ฅผ ๊ฐ์ง๊ฒ์ด ์ฌ๋ฌ๊ฐ์ผ ๊ฒฝ์ฐ
โ์ค๋ฅ๊ฐ ๋ ๊น?, ์๋๋ค๋ฉด ๋จผ์ tag๋ฅผ ์ ๋ ฅํ ๊ฐ์ฒด๊ฐ ์ ํ๋ ๊น?, ์๋ ๋ฐ๋๋ก ๋์ค์ ์ ๋ ฅ๋ ๊ฐ์ฒด๊ฐ?โ
label ์ 2๊ฐ ๋ง๋ค์ด์, ๋๊ฐ ๋๋์ง ๋จผ์ ๋ณด์,
// ํ๊ทธ ์ง์
label1.tag = 1
label2.tag = 1
// ํ๋ฉด ์ถ๊ฐ
self.view.addSubview(label1)
self.view.addSubview(label2)
// ๋ฒํผ ์ก์
let label = self.view.viewWithTag(1) as! UILabel
label.text = "JS Blog!"
label.sizeToFit()
label ๋ง๋๋๊ฑด ์๋ตํ๊ณ ์ค์ ๋ถ๋ถ๋ง ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋ผ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์
์์๋๋ก ๋จผ์ ์ง์ ํ๊ฒ ๋ณํ๋ค.
๊ทธ๋ผ ๋น์ฐํ ์ง์ ์์๋ฅผ ๋ฐ๊พธ๋ฉด 2๊ฐ ๋ณํ๊ฒ ์ง?
// ํ๊ทธ ์ง์ (์์ ๋ฐ๋)
label2.tag = 1
label1.tag = 1
// ํ๋ฉด ์ถ๊ฐ
self.view.addSubview(label1)
self.view.addSubview(label2)
?
???
??????????
????????????
์๋๋คโฆ ์ง์ ์์๊ฐ ์ค์ํ๊ฒ์ดโฆ.
๊ทธ๋ผ ์ถ๊ฐํ ๋์ธ๊ฐ?
// ํ๊ทธ ์ง์
label1.tag = 1
label2.tag = 1
// ํ๋ฉด ์ถ๊ฐ (์์ ๋ฐ๋)
self.view.addSubview(label2)
self.view.addSubview(label1)
์คโฆ ํธโฆ. ์ด๊ฒ๋ ์ ๋ง ์์ ๋ชปํ๋ค.
**์ง์ ์์ ๋ณด๋ค ์ค์ํ๊ฑด ์ถ๊ฐํ ์์ ์ด๋ค.**
๊ทธ๋ ๋ด, ํ๊ทธ ์ง์ ์ ๋์ค์ ํด์ฃผ๋ฉด ๋ค๋ฅผ๊น?
// ํ๋ฉด ์ถ๊ฐ
self.view.addSubview(label1)
self.view.addSubview(label2)
// ํ๊ทธ ์ง์
label2.tag = 1
label1.tag = 1
๊ทธ๋๋ก๋ค
์ด๋ก์จ
์ง์ ์์ < ํ๋ฉด ์ถ๊ฐ ์์
์ด๋ผ๋๊ฒ์ด ํ์ธ ๋์๋ค.
๊ทธ๋ ๋ด
// ํ๊ทธ ์ง์
label2.tag = 1
// ํ๋ฉด ์ถ๊ฐ
self.view.addSubview(label1)
self.view.addSubview(label2)
์ด ์ํ์์ ๋ฒํผ ์ ํ์ label1
์ ํ๊ทธ๋ฅผ ์ง์ ํ๋ค๋ฉด???
( ํด๋น ํ๊ทธ๋ฒํธ๊ฐ ์ฌ์ฉ๋ ํ์๋ โ์ง์ ์์ < ํ๋ฉด ์ถ๊ฐโ ์์ ์ธ์ง ํ์ธ์ ์ํจ)
์ด๋ฒ์ ์กฐ๊ธ ๋ฐฉ์์ด ๋ฐ๋์ด์ผ ํ๋ค.
label ๋๊ฐ๋ฅผ viewDidLoad์์์ ๋ง๊ณ ํด๋์ค ๋ด๋ถ์ ์ ์ธํด์ค๋ค.
์ด๋ ๊ฒ!
let label1 = UILabel()
let label2 = UILabel()
override func viewDidLoad() { ... }
๊ทธ๋ฆฌ๊ณ ๋ฒํผ ์ก์ ์ชฝ์
// Tag๋ก ์ง์
let label = self.view.viewWithTag(1) as! UILabel
label.text = "JS Blog!"
label.sizeToFit()
// ๋จผ์ ํ๋ฉด์ ์ถ๊ฐ๋ label1์ ํ๊ทธ ์ง์
label1.tag = 1
์ฌ์ฉ์ด ๋๊ฑด ๋ง๊ฑด ์๊ด์ด์์๋ค. ์ค์ง ์ค์ํ๊ฑด
โTag ์ฐ์ ์์: ์ง์ ์์ < ํ๋ฉด ์ถ๊ฐ ์์ โ
Q3. ๊ฐ์ Tag๊ฐ๋ค์ด ์ฌ๋ฌ๊ฐ๋ฉด?
A3. Tag ์ ํ ์์ ๋ณด๋ค, ๋จผ์ ํ๋ฉด ์ถ๊ฐ๋ ์ค๋ธ์ ํธ๊ฐ ๊ฐ์ด๋ค.
Q4. Q2 VS Q3
๊ทธ๋ ๋ด ๋์๊ฒ ์ถฉ๊ฒฉ์ ์คฌ๋ Q2์
โQ2. MainView์์ tag 1๋ฒ์ ๊ฐ์ง๊ณ ์ค๋ฉด ์ฑ๊ณตํ ๊น?โ
Q3์ ์์ด์ ์คํ ํด๋ณด์
override func viewDidLoad() {
label1.tag = 1
label.tag = 1 // subView์ Label
}
์ฐ์ , ์ด ์คํ์ ์ง์ผ๋ด์ผํ ์ ์
label์ ๊ฒฝ์ฐ, self.view์ ์ถ๊ฐ๋ ๊ฐ์ฒด๊ฐ ์๋๋ค.
self.view์ ์ถ๊ฐ๋ mainView์ ์ถ๊ฐ๋ subView์ ์ถ๊ฐ๋ label์ด๋ค.
ํน์ ๊ทธ๋ฐ ๊ณ์ธต์ด๋ผ๋ฉด, ์ฐ์ ์์๊ฐ ๋ฐ๋์ง ์์๊น? ๋ผ๋ ํน์๋๋ ์๊ฐ์์๋ค.
label1์ ๊ฒฝ์ฐ ์ฝ๋๋ก ์ถ๊ฐ๋ ์ค๋ธ์ ํธ
label์ ๊ฒฝ์ฐ StoryBoard์ ์ถ๊ฐ๋ ์ค๋ธ์ ํธ ์์ ์๊ฐํ๊ณ ์์ํด๋ณด์.
โA3. Tag ์ ํ ์์ ๋ณด๋ค, ๋จผ์ ํ๋ฉด ์ถ๊ฐ๋ ์ค๋ธ์ ํธ๊ฐ ๊ฐ์ด๋ค.โ ๋ ๋ณํ๊ฐ ์์๋ค.
์ผ๊ด์ฑ ์์ด์ ์ข๋ค!
์คํ ๋ฆฌ๋ณด๋์ ๊ฒฝ์ฐ ViewDidLoad ๋ณด๋ค๋ ์ด์ ์ ๊ทธ๋ ค์ง๊ธฐ ๋๋ฌธ์,
label์ด ๋๋นจ๋ฆฌ ์ถ๊ฐ ๋์๋ค.
(์ ํํ ์์ ๊ณต๋ถํ ๊ฒธ ๋ ์์๋ด์ผ๊ฒ ๋ค.)
๋ง๋ฌด๋ฆฌ
๊ฐ์ฅ ์ค์ํ๊ฒ์
๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋ ์์ ์ด ์ค์ํ๋ค
๋ ๊ฒ์ด์๋ค.
๋ถ๊ฐ์ ์ผ๋ก ํท๊ฐ๋ ธ๋ tag๋ ์ด๋ ๋ฒ์๊น์ง ๋ ๊ฒ์ธ๊ฐ (Q2)๋ ์๊ฒ๋์๋ค.
๊ทธ๋๋ ์ฌ๋ฌ ์๋ ํตํด์ ์ด์ ๊ฐ์ด ์๋ค ์ถ์ด์ ๋ธ๋ก๊ทธ์ ์ ์๊ฒ์ด์๋๋ฐ,
์คํ์ค ์์์ด ํ๋ฆฐ๊ฒ ๋์์ ๋นํฉ์ค๋ฌ์ ๋ค.
๋นํฉ์ค๋ฌ์ ๋ ๋งํผ! ๋ค์์ ์ฌ์ฉํ ๋ ์ข๋ ์ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๋!