-
[UIKit] .xib μ¬μ©νκΈ°iOS/π μ΄μμ κΆκΈμ¦ 2022. 5. 30. 22:05
μλ νμΈμ π₯·π»
μ΄λ² μκ°μλ xib μ¬μ©λ²μ μ 리νλ €κ³ ν©λλ€.
μμκ° λλ μν©μ λ€μκ³Ό κ°μ΅λλ€.
λΆμ μ μ¬κ°νμ UIView μ "RED" λΌλ UILabel μ μλΈλ·°λ‘ κ°μ§λ
UIView λ₯Ό μ¬μ¬μ©νκΈ° μν΄ RedView.xib μ RedView.swift νμΌμ λ§λ€μμ΅λλ€.
μ΄ xib λ₯Ό λ€λ₯Έ κ³³μμ μ¬μ©νκ³ μΆλ€λ©΄?
ν¬κ² λκ°μ§ λ°©λ²μ΄ μμ΅λλ€.
1. xib νμΌμ File's Owner μ 컀μ€ν ν΄λμ€λ₯Ό λ±λ‘νμ¬ μ¬μ©νκΈ°
2. xib νμΌμ λ·°μ 컀μ€ν ν΄λμ€ λ₯Ό λ±λ‘νμ¬ μ¬μ©νκΈ°
λ°©λ² 1. File's Owner μ 컀μ€ν ν΄λμ€λ₯Ό λ±λ‘νμ¬ μ¬μ©νκΈ°
1. xib νμΌμ File's Owner μ 컀μ€ν ν΄λμ€λ₯Ό λ±λ‘ν©λλ€.
2. xib λ₯Ό μ¬μ©ν μ€ν 리보λμ UIView λ₯Ό μνλ κ³³μ λ°°μΉνκ³ , Custom Class λ₯Ό RedView λ‘ μ§μ ν΄μ€λλ€.
autolayout μ μλμ λ°λΌ μ€μ νλ©΄ λ©λλ€.
μ λ RedView λ΄λΆμμ ν¬κΈ° μ μ½μ μ‘μμ£ΌκΈ° λλ¬Έμ
μΈν°νμ΄μ€ λΉλμμ μ λ κ² λΉ¨κ°μμΌλ‘ λμλ λ°νμμμλ λ¬Έμ κ° μμ΅λλ€.
private func setUpSubviews() { ... // Autolayout μ λ°λ‘ μ‘μμ£Όμμ΅λλ€. redView.translatesAutoresizingMaskIntoConstraints = false redView.leadingAnchor.constraint(equalTo: redView.superview!.leadingAnchor).isActive = true redView.trailingAnchor.constraint(equalTo: redView.superview!.trailingAnchor).isActive = true redView.topAnchor.constraint(equalTo: redView.superview!.topAnchor).isActive = true redView.bottomAnchor.constraint(equalTo: redView.superview!.bottomAnchor).isActive = true }
3. ν΄λΉ μ€ν 리보λμ VC κ° νλ©΄μ λ±μ₯νκΈ° μ§μ μ, UIKit μ RedView μ init(coder:) λ₯Ό νΈμΆν©λλ€.
λ§μ½ μ€ν 리보λλ₯Ό μ¬μ©νμ§ μκ³ μ½λλ‘ UIλ₯Ό μμ±νλ λ°©μμ μ¬μ©νλ€λ©΄ init(frame:) μ μλμ κ°μ΄ 컀μ€ν νλ©΄ λ©λλ€.
μ°λ¦¬λ μ΄ init(coder:) λ₯Ό 컀μ€ν ν κ²μ λλ€.
ꡬ체μ μΌλ‘, μ΄ init(coder:) μμ xib μ μμΉ΄μ΄λΈλ λ·° κ³μΈ΅μ λΆλ¬μμ RedView μ λ£μ΄μ€λλ€.
μ΄ λ, nib μ λΆλ¬μ€λ λ κ°μ§ api κ° μμ΅λλ€.
1. UINib μ μ¬μ©νλ€.
2. Bundle.main.loadnib(_:owner:options:) μ μ¬μ©ν©λλ€.
μ΄ λ redView λ₯Ό λ°μΈλ©νλ μ½λμμ as? UIView λ₯Ό ν΄μΌ μ μμ μΌλ‘ μΊμ€ν μ΄ λ©λλ€.
xib μμ λ·°μ 컀μ€ν ν΄λμ€λ₯Ό λ°λ‘ μ§μ ν΄μ£Όμ§ μμκΈ° λλ¬Έμ λλ€.
μ¦ as? RedView λ μΊμ€ν μ μ€ν¨ν©λλ€.
λν, xib μ 1κ° μ΄μμ View λ₯Ό λ£μ΄λ΄€λ€λ©΄ nib.first μ κ°μ μ κ·Όμ μμ λμ΄μΌν©λλ€.
μμ λ API μ λͺ¨λ λ°°μ΄μ 리ν΄νλ€λ κ²μ 리λ§μΈλν΄μΌν©λλ€.
3. κ²°κ³Ό
μνλλλ‘ μ κ·Έλ €μ‘μ΅λλ€.
μμμ μμ±ν μ½λλ₯Ό νμ©νμ¬ μ΄μ λ€μν κ³³μμ μ¬μ¬μ©ν μ μμ΅λλ€.
λ°©λ² 2: λ·°μ 컀μ€ν ν΄λμ€ λ₯Ό λ±λ‘νμ¬ μ¬μ©νκΈ°
1. λ·°μ μ§μ 컀μ€ν ν΄λμ€λ₯Ό μ€μ ν©λλ€.
2. VC νΉμ μνλ κ³³, μνλ μμ μ μ§μ μμ±νμ¬ λ£μ΄μ€λλ€.
μ΄ λ, 1 μμ 컀μ€ν ν΄λμ€λ₯Ό RedView λ‘ μ€μ νμκΈ° λλ¬Έμ as? RedView λ‘ λ°λ‘ μΊμ€ν μ΄ κ°λ₯ν©λλ€.
override func viewDidLoad() { super.viewDidLoad() let nib = UINib(nibName: "RedView", bundle: .main) guard let redView = nib.instantiate(withOwner: self).first as? RedView else { return } view.addSubview(redView) redView.translatesAutoresizingMaskIntoConstraints = false redView.leadingAnchor.constraint(equalTo: redView.superview!.leadingAnchor).isActive = true redView.trailingAnchor.constraint(equalTo: redView.superview!.trailingAnchor).isActive = true redView.topAnchor.constraint(equalTo: redView.superview!.topAnchor).isActive = true redView.bottomAnchor.constraint(equalTo: redView.superview!.bottomAnchor).isActive = true
3. κ²°κ³Ό
Autolayout μ κ°μ μ½λλ₯Ό μ¬μ©νμλλ° μ κ²°κ³Όλ λ°©λ² 1κ³Ό λ€λ₯ΌκΉμ?
λ·° κ³μΈ΅μ μ°¨μ΄κ° μκΈ° λλ¬Έμ λλ€.
λ°©λ² 1 μ μ¬μ©νλ©΄ xib μ μ μλ λ·° κ³μΈ΅μ UIView κ° νλ² λ μμ λνλ κ΅¬μ‘°κ° λ©λλ€.
λ°©λ² 2λ xib μ μ μλ λ·° κ³μΈ΅ κ·Έλλ‘λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ€λλ λλ μ±μ₯νλ€!!π₯
π€ [Back to the Basics] π»
μ£Όλμ΄ iOS κ°λ°μ μ°μ§±μ κΈ°μ λΈλ‘κ·Έμ λλ€.[μ°Έκ³ μλ£ ππ»βοΈ]
'iOS > π μ΄μμ κΆκΈμ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Xcode command line λͺ λ Ήμ΄μμ μ¬μ©ν ν΄μ²΄μΈ μ ννκΈ° (4) 2022.09.13 Could not find module 'Kingfisher' for target 'x86_64-apple-ios-simulator' ν΄κ²° (0) 2021.12.27 [Xcode] Build input file cannot be found Info.plist μ€λ₯ ν΄κ²°λ² (0) 2021.10.04 [Xcode] μ± λ²λ€ μ°ΎκΈ° (2) 2021.10.02 [iOS] does not implement methodSignatureForSelector: -- trouble ahead (0) 2021.05.24