IBInspectable, IBDesignable
์คํ ๋ฆฌ๋ณด๋๋ก ์์ ์ ํ๋ค๋ณด๋ฉด ์ธ์คํํฐ์์ ์์ฑ๊ฐ์ ์กฐ์ ํ๋ ์ผ์ด ๋ง์๋ฐ ํ๋ ๊ฐ์ฅ ๊ท์ฐฎ์๋ ๊ฒ์ border ๊ฐ์ ์ค์ ํ๋ ๊ฒ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ค๋ ๊ฒ์ด๋ค. border ๊ฐ์ ๋งค๋ฒ ์ฝ๋๋ก ๋ช ์ค์ฉ ์ง๋ ๊ฒ๋ณด๋ค ์ธ์คํํฐ ์ฐฝ์์ ์ค์ ํ ์ ์์ผ๋ฉด ์ผ๋ง๋ ์ข์๊น?
IBInspectable๊ณผ IBDesignable ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ด์ฉํ๋ฉด ๊ทธ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋ค.
- ์ธํฐํ์ด์ค ๋น๋์์ ์ค์๊ฐ์ผ๋ก ๊ฐ์ฒด์ ์์ฑ์ ์ ์ฉํ๊ณ ํ์ธ ๊ฐ๋ฅ
- ๋ฐํ์์ด ์๋๋ผ ์ปดํ์ผ ํ์์ ํ์ธ ๊ฐ๋ฅ
- ๋ฐ๋ก ๋ฐ์์ด ์ ๋ ์ ์์
// ์ธํฐํ์ด์ค ๋น๋ ์ธ์คํํฐ ์์ญ Show
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
@IBInspectable
var borderWidth: CGFloat {
get {
return layer.borderWidth
}
set {
layer.borderWidth = newValue
}
}
@IBInspectable
var borderColor: UIColor {
get {
return UIColor(cgColor: layer.borderColor!)
}
set {
layer.borderColor = newValue.cgColor
}
}
Custom View Design(with XIB)
- XIB ํ์ผ๊ณผ UIView ํด๋์ค ๋ง๋ค์ด์ฃผ๊ธฐ
- File's Owner์ ํด๋์ค ์ฐ๊ฒฐํด์ฃผ๊ธฐ
- Safe Area LayoutGuide ํด์ ํ๊ธฐ
- ์ฌ์ด์ฆ Freeform์ผ๋ก ์กฐ์ ํ๊ธฐ
required init?(coder: NSCoder) ์ด๋์ ๋ผ์ด์ (์ค์)
- Xib ํ์ผ์ ์ปดํ์ผ ์ Nib ํ์ผ๋ก ๋ณํ
- ํ๋ฉด์ ์ถ๋ ฅํ๊ธฐ ์ํด์๋ init(coder: NSCoder)๋ฅผ ์ด์ฉํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํจ. (์ฝ๋ ๊ธฐ๋ฐ์ด ์๋๋ผ Xib๋ก ํ์ผ์ ๋ง๋ ๋ค๋ฉด!)
override init(frame: CGRect)
- ์ฝ๋ ์ด๊ธฐํ ๊ตฌ๋ฌธ
- ์ฝ๋ ๋ฒ ์ด์ค์ Xib ๋ฒ ์ด์ค๋ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ์๋ก ๋ค๋ฅด๊ฒ ๊ฐ์ ธ๊ฐ๋ค.
- ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ์ฝ๋ ๋ฒ ์ด์ค๋ผ๊ณ ํ๋๋ผ๋ required init?(coder: NSCoder) ๊ตฌ๋ฌธ์ ์์ฑํด์ผ ํ๋ค๋ ์ ์ด๋ค.
Nib ํ์ผ ๋ก๋
- Nib ํ์์ ์ปดํ์ผ๋ฌ๊ฐ ์ดํดํ ์ ์๋ ํ์ผ ํ์
- Nib์ ๋ก๋ํด์ ์ฌ์ฉ์์ ํ๋ฉด์ ๋ฃ์ด์ฃผ๋ ์์ ํ์
- UINib์ nib ์ปจํ ์ธ ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ํ๊ณ ์์.
- instantiate ์์ ์ Unarchving ํจ (- ์์นด์ด๋น, ์ธ์์นด์ด๋น ๊ฐ๋ ์ ๋ฆฌ ํ์)
let view = UINib(nibName: "CardView", bundle: nil)
.instantiate(withOwner: self).first as! UIView
view.frame = bounds
self.addSubview(view)
์ ์ค์ฒฉ ๊ตฌ์กฐ ์ค์ต
๋ ์ด์์์ ๊ตฌ์ฑํ๋ ์ ์ฅ์์ ์ ๋ง ๊น๋ค๋ก์ด ๊ฒ ์ค ํ๋๊ฐ ์ค์ฒฉ ๊ตฌ์กฐ๊ฐ ์๋๊น ์ถ๋ค. ์์งํ iOS 13 ์ด์ ๋ถํฐ๋ Compositional Layout ๋๋ถ์ ์ค์ฒฉ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋ง์ด ์ฌ์์ก๊ธฐ๋ ํ์ง๋ง ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ๋ ์ ํ์๊ฐ ์๋ค๊ณ ๋ณธ๋ค.
์๋กญ๊ฒ ์ก์ ํฌ์ธํธ
์๊ฐํด๋ณผ๋งํ ํฌ์ธํธ๋ TableView Cell์์ Collection View๊ฐ ๋ค์ด๊ฐ ์๋ ์ค์ฒฉ ๊ตฌ์กฐ๋ผ๊ณ ๊ฐ์ ํ์ ๋, ๊ธฐ์กด์ ๋๋ ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ์ฐ๊ฒฐํด์ฃผ๋ ์์ ์ ์ ์์์ ํด์ฃผ์๋๋ฐ ์ปจํธ๋กค๋ฌ๋ก ๋๊ณ ์์ ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ์ด ๋ ๋์ ์ ์๋ค๋ ์๊ฐ์ด์๋ค.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "MainTableViewCell", for: indexPath) as? MainTableViewCell else {
return UITableViewCell()
}
cell.titleLabel.text = TMDBAPIManager.shared.tvList[indexPath.section].0
cell.collectionView.delegate = self
cell.collectionView.dataSource = self
cell.collectionView.tag = indexPath.section
cell.collectionView.register(UINib(nibName: "CardCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "CardCollectionViewCell")
cell.collectionView.reloadData() // Index Out of Range ํด๊ฒฐ
return cell
}
๊ฒฐ๊ตญ์ ๋ฐ์ดํฐ๋ผ๋ ๊ฒ๋ค์ด ์ปจํธ๋กค๋ฌ์์ ๊ด๋ฆฌ๊ฐ ๋๊ณ ์ก์ ์ฒ๋ฆฌ๋ ์ปจํธ๋กค๋ฌ์์ ํด์ฃผ๋ ๋ถ๋ถ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ ์์์ ์ด๋ค ์ฒ๋ฆฌ๋ค์ ํด์ฃผ๊ฒ ๋๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ๋ ๊ทธ๋ ๊ณ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ ๋ฒ๊ฑฐ๋กญ๊ฒ ๋ ์๋ ์๋ค๋ ๊ฒ์ด๋ค.
Controller - TableViewCell - CollectionView - CollectionViewCell
์๊ฐํด๋ณด๋๊น ์ด ํ๋ฆ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ณ์ํด์ ์ ๋ฌํด์ฃผ๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋ก์ ๋ ๊ฒ ๊ฐ๋ค. ์๋ก์ด ๊ด์ ์ ์๊ฒ ๋์ด์ ์ฌ๋ฐ์๋ค.
'๐ฑ SeSAC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SeSAC] 220811 TIL (0) | 2022.08.15 |
---|---|
[SeSAC] 220810 TIL (0) | 2022.08.14 |
[SeSAC] 220808 TIL (0) | 2022.08.12 |
[SeSAC] 220805 TIL (2) | 2022.08.10 |
[SeSAC] 220804 TIL (0) | 2022.08.10 |