์ฝ๋๋ก ๋ทฐ๋ฅผ ๊ตฌ์ฑํ ๊ฒฝํ์ ๋ช๋ฒ ์์ง๋ง ์คํ ๋ฆฌ ๋ณด๋๋ก ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์ต์ํด์ ธ์ ๋ค์ ๊ธฐ์ต์์์ ์ฌ๋ผ์ก๋ค ใ .ใ
์๋ฌด๋๋ ์ง๊ธ ๋ค๋๋ ํ์ฌ์์๋ ์คํ ๋ฆฌ๋ณด๋๋ก ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์คํ ๋ฆฌ๋ณด๋๋ ๋ฐ๋ก ์ฐ์ตํ์ง ์์๋ ์ต์ํด์ง ์ ๋ฐ์ ์๋ ํ๊ฒฝ์ด๊ธฐ ๋๋ฌธ์ ํผ์์ ํ๋ ์ฐ์ต ์์ ๋ ํ๋ก์ ํธ๋ ์ฝ๋๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ด์ผ๊ฒ ๋ค!
๊ตฌ์ฑํ ํ๋ฉด์ ์๋์ ๊ฐ๋ค.
UIViewController - UIView - UIView - UIButton ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์กฐ๊ธ ๋ ์์ธํ ๋ณด์๋ฉด ...
์ด๋ฐ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. (์ด ๊ธฐ๋ฅ ๋๋ฌด ์ข๋ค ๐ซถ๐ป)
๋จผ์ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์ ์ฒด์ ์ธ ํ์ ๋ค์๊ณผ ๊ฐ๋ค.
// ์๋ก์ด ๋ทฐ ์์ฑ
let newView = UIView()
// ๊ธฐ๋ณธ ๋ทฐ์ ์ถ๊ฐ
view.addSubview(newView)
// ์คํ ๋ ์ด์์์ ์ฌ์ฉํ์ฌ ์์น์ ํฌ๊ธฐ ์ง์
newView.translatesAutoresizingMaskIntoConstraints = false
// ์์ชฝ ์ ์ฝ ์กฐ๊ฑด
newView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
// ์๋์ชฝ ์ ์ฝ ์กฐ๊ฑด
newView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
// ์ผ์ชฝ ์ ์ฝ ์กฐ๊ฑด
newView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
// ์ค๋ฅธ์ชฝ ์ ์ฝ ์กฐ๊ฑด
newView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
1. ํ๋ฉด์ ์ฌ๋ ค์ค ๋ทฐ ์์ฑ
2. View ์ถ๊ฐ (addSubview())
3. ์คํ ๋ ์ด์์ ์ค์
์ด๊ฑธ ์์๋๋ก ์ํด์ฃผ๋ฉด ์ด๋ฐ ์๋ฌ๋ฅผ ๋ง์ฃผ์น ์ ์๋ค!
That's illegal... -> ๋ด๊ฐ ์์ฑํ ๊ฒ๊ณผ ๊ฐ์ด ์คํ ๋ ์ด์์ ์ค์ ํ addSubview๋ฅผ ํ๋ฉด ์๋ฐ ์๋ฌ๋ฅผ ๋ง์ฃผ์น๋ ์ฃผ์ํ์! (์๊ฐํด๋ณด๋ฉด ๋น์ฐํ ๋ทฐ๋ฅผ ์ถ๊ฐํ๊ณ ์คํ ๋ ์ด์์์ ์ค์ ํ๋๊ฒ ๋ง๋ค..~!)
// PushView.swift
import UIKit
class PushView: UIView {
private lazy var pushView: UIView = {
let view = UIView()
view.backgroundColor = .cyan
view.addSubview(pushBtn)
return view
}()
lazy var pushBtn: UIButton = {
let btn = UIButton()
btn.setTitle("Push", for: .normal)
btn.addTarget(self, action: #selector(touchPushBtn), for: .touchUpInside)
return btn
}()
@objc func touchPushBtn() {
print("tap push button in UIView")
}
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(pushView)
setConstraints()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setConstraints() {
pushView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
pushView.topAnchor.constraint(equalTo: topAnchor),
pushView.leadingAnchor.constraint(equalTo: leadingAnchor),
pushView.trailingAnchor.constraint(equalTo: trailingAnchor),
pushView.bottomAnchor.constraint(equalTo: bottomAnchor)
])
pushBtn.translatesAutoresizingMaskIntoConstraints = false
pushBtn.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
pushBtn.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
}
}
// PushViewController.swift
import UIKit
final class PushViewController: UIViewController {
private let pushView = PushView()
override func loadView() {
view = pushView
}
override func viewDidLoad() {
super.viewDidLoad()
setAddTarget()
}
func setAddTarget() {
pushView.pushBtn.addTarget(self, action: #selector(tapPresentBtn), for: .touchUpInside)
}
@objc func tapPresentBtn() {
print("tap push button in UIViewController")
}
}
๋๋ ์ด๋ ๊ฒ ๋ทฐ์ ๋ทฐ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํด์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ storyboard๋ ์์ ๋ ๋์ง๋ง ์๊ธฐ์๋ storyboard๋ ์์ ์ง ์๊ณ ์์ํ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ง ์ฐ๊ฒฐํด์ค ์ํ์ด๋ค!
ํ๋ ๋ ๋ด๊ฐ ๊ถ๊ธํ๋ ๋ถ๋ถ์ด ์์๋๋ฐ, UIView์ UIViewController์์ ๋ชจ๋ ๋ฒํผ์ addTarget๋ฅผ ์ค์ ํ ์ ์์ด์ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ด๊ฑธ ๊ฒฐ์ ํด์ ์์ฑํ๋์ง ๊ถ๊ธํ๋ค.
๊ฒฐ๋ก ์ ๋ ๊ณณ ์ด๋์ ์์ฑํด๋ ์๊ด์ ์๋๋ฐ, ๋ด๊ฐ UIView์ UIViewController๋ฅผ ๋ค๋ฅธ ํ์ผ๋ก ๋ถ๋ฆฌํ ์ด์ ์ ๊ฐ์ด ๋์์ธ ํจํด(MVC ์ฌ์ฉ)์์์ ์ด์ ๊ฐ ์๋ค.
UIView๋ ํ๋ฉด์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ์๋ฅผ๋ค์ด์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ๋ฉด์ ์์์ด ๋ณํ๋ค๋๋ฑ.. ์ด๋ฐ ์ฒ๋ฆฌ๋ UIView์์ ๋ฒํผ์ addTarget๋ฅผ ์ค์ ํ๋๊ฒ์ด ๋ง๊ณ , View๋ฅผ ์ด๋ํ๋๊ฒ๊ณผ ๊ฐ์ ๋์์ UIView๊ฐ ์๋ UIViewController์์ ํ๋๊ฒ ๋ง๋ค๊ณ ์๊ฐํ๋ค. (UIView์์ Push๋ Present๋ฅผ ํ๋ฉด ์ด์ํ๋๊น..)
๊ทธ๋ฆฌ๊ณ ๋๊ณณ ๋ค addTarget๋ฅผ ์ฌ์ฉํด ํจ์๋ฅผ ์คํํ๋ฉด (์์ ์ฝ๋ ์คํ ๋ฒํผ ํฐ์น ํ ๊ฒฐ๊ณผ)
์ด์ฒ๋ผ UIView์ ์๋ ๋ฒํผ์ ํจ์๊ฐ ๋จผ์ ์๋ํ๋ค (์ฐธ๊ณ )
์ด๊ฑฐ ์์ฑํ๋ฉด์ ์ด ๋ด์ฉ๋ค์ ๋ค ์ตํ์ง๋ง~~ ๋ ๋ช์ฃผ ์ง๋๋ฉด ๊น๋จน์ ์ ์์ผ๋ ๋ ๊น๋จน์ผ๋ฉด ์ด๊ฑฐ ๋ณด๊ณ ๋ค์ ์ตํ์ผ๊ฒ ๋ค~
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] ReactiveX๋? / RxSwift ๊ธฐ์ด ์ตํ๊ธฐ (0) | 2023.05.08 |
---|---|
[iOS] ๋ทฐ๋ฅผ push, present ํ๋ ๊ณผ์ ์์ ์ด์ navigation controller์ ์ ๊ทผํด ๋ทฐ pushํ๊ธฐ (0) | 2023.04.20 |
[iOS] xcode Vary for Traits (0) | 2023.03.28 |
[iOS] ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด (Delegate Pattern) (0) | 2023.03.18 |
[iOS] OAuth Login firebase์ ์ฐ๋ํ๋ฉด์ ์๊ฒ๋ ์ (Apple, Google, Email, Kakao) (0) | 2022.12.23 |