์ค๋น๋ฌผ & ๋ค์ด๊ฐ๋ฉฐ
์ด์ ํฌ์คํ ์ ์ด์ด์ ์์ ํ๋ ํํ ๋ฆฌ์ผ ์ด์ง๋ง ์ด๋ฏธ ์์ฑ๋ ๊ธฐ๋ณธ UICollectionView๋ง ์๋ค๋ฉด ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋ ๊ฑฐ ๊ฐ์ต๋๋ค! ์ด๋ฒ์ ๊ตฌํํ ๊ฒ์ UICollectionView๋ฅผ 3๊ฐ์ Section์ผ๋ก ๋๋๋ ๊ฒ ์ ๋๋ค~ (์น์ ์ ๋ค์ด๊ฐ๋ ์ ์ ๋ค์ ํฌ์คํ ์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.)
๊ฐ๋ UI ํํ ๋ฆฌ์ผ ๋ณด๋ฉด ์๋จ ์ปฌ๋ ์ ๋ทฐ๋ ์๋์ผ๋ก ๋์ด๊ฐ๋ ์นด๋๋ทฐ, ๋ฐ๋ก ์๋์๋ ๋ค๋ฅธ ์ปฌ๋ ์ ๋ทฐ๋ฅผ ๋๋ ๋ค ๋๊ฐ, ๊ฐ์ ํ๋ฉด์์ ๋ค๋ฅธ ์ปฌ๋ ์ ๋ทฐ๋ค์ด ๋ค์ด๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ ๊ฐ๊ฐ์ ์ปฌ๋ ์ ๋ทฐ๋ฅผ ๊ตฌํํด๋ ๋๊ฒ ์ง๋ง Section์ ๋๋์ด ๊ตฌํํด๋ ๋ฉ๋๋ค~ ์ด๋ป๊ฒ ๊ตฌํํ ์ ์๋์ง ์์๋ด ์๋ค~~
section์ ๊ฐฏ์๋ฅผ ์ง์ ํ๋ ๋ฉ์๋๊ฐ ์์ต๋๋ค.
optional func numberOfSections(in collectionView: UICollectionView) -> Int
optional์ด๊ธฐ ๋๋ฌธ์ ์์ฑํ์ง ์์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
3๊ฐ์ ์น์ ์ ์์ฑํ๊ฒ ์ต๋๋ค
func numberOfSections(in collectionView: UICollectionView) -> Int {
3
}
so simple
๊ทธ๋ฆฌ๊ณ ๊ฐ ์น์ ์ ํ ๊ฐ์ ์ ๋ง ๋ฃ์ด ์ฃผ๊ฒ ์ต๋๋ค
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
1
}
์ปค์คํ ์ ์ ๋ฃ๊ธฐ ์ํด ํ์ผ์ ์์ฑํด ์ฃผ๊ฒ ์ต๋๋ค.
cocoa Touch class ์ ํํด ์ฃผ์๊ณ
Subclass ๋ฅผ UICollectionViewCell๋ก ์ง์ ํด ์ฃผ์ธ์
class ๋ช ์ ์ํ์๋ ๊ฑธ๋ก ์ง์ผ์๋ฉด ๋ฉ๋๋ค
XIB๋ฅผ ์ด์ฉํด์ UI๋ฅผ ์์ฑํ๊ณ ์ถ์ผ์๋ค๋ฉด 'Also create XIB file'์ ์ฒดํฌํด ์ฃผ์๋ฉด
xib ํ์ผ์ด ์์ฑ๋ฉ๋๋ค
์ ๋ ๊ฐ๋จํ ์ ์ ๊ตฌํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋์ด๊ฐ ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
์น์ ์ ์ด 3๊ฐ ๋ง๋ค์๊ณ ๊ฐ ์น์ ์ ๋ฐ๋ฅธ UICollectionViewCell ํ์ผ์ ์์ฑํด ์ฃผ์์ต๋๋ค.
๊ฐ UICollectionViewCell์ ์์ ๋ณผ ์ ์๋๋ก ๋ฐฉ๊ธ ์์ฑํ ํ์ผ์ ์๋์ ๊ฐ์ด ์ ์ด์ค๋๋ค
์์์ ๋ค ๋ค๋ฅด๊ฒ ์์ฑํด ์ฃผ์ธ์
import UIKit
class MinutePickerCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = #colorLiteral(red: 0.5843137503, green: 0.8235294223, blue: 0.4196078479, alpha: 1)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
๋ค์ ViewController.swift ํ์ผ๋ก ๋์์ ์ฃผ์ธ์
์ฌ์ฌ์ฉ ์ ์ ๋ฑ๋กํด์ผ ํ ๋ ์ฌ์ฉํ identifier๋ ์ ์์ ์ง์ ํ ๊ฒ๊ณผ ์ปฌ๋ ์ ๋ทฐ์ ๋ฑ๋กํ id์ ์ฒ ์๊ฐ ๋ค๋ฅด๋ฉด ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค.
๊ทธ๋์ ์๋์ ๊ฐ์ด identifier์ ์์ฑํด ์ฃผ๊ฒ ์ต๋๋ค.
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
let ID_DATE_CELL = "DatePickerCell"
let ID_HOUR_CELL = "HourPickerCell"
let ID_MIN_CELL = "MinutePickerCell"
//(์ดํ ์๋ต)
์ด์ ์น์ ๋ณ๋ก cell์ ์ง์ ํด ์ค๋๋ค
cellForItemAt ๋ฉ์๋๋ฅผ ์๋์ ๊ฐ์ด ์์ ํฉ๋๋ค.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var cell = UICollectionViewCell()
if indexPath.section == 0 {
cell = collectionView.dequeueReusableCell(withReuseIdentifier: ID_DATE_CELL, for: indexPath) as! DatePickerCell
} else if indexPath.section == 1 {
cell = collectionView.dequeueReusableCell(withReuseIdentifier: ID_HOUR_CELL, for: indexPath) as! HourPickerCell
} else {
cell = collectionView.dequeueReusableCell(withReuseIdentifier: ID_MIN_CELL, for: indexPath) as! MinutePickerCell
}
return cell
}
collectionView์ ํด๋น ์ ์ ๋ฑ๋กํด ์ค๋๋ค. viewDidLoad ๋ถ๋ถ์์
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(collectionView)
self.collectionView.delegate = self
self.collectionView.dataSource = self
// ์์ ๋ ๋ถ๋ถ ----------------------------------------------------------------------------------------
self.collectionView.register(DatePickerCell.self, forCellWithReuseIdentifier: ID_DATE_CELL)
self.collectionView.register(HourPickerCell.self, forCellWithReuseIdentifier: ID_HOUR_CELL)
self.collectionView.register(MinutePickerCell.self, forCellWithReuseIdentifier: ID_MIN_CELL)
// ----------------------------------------------------------------------------------------
self.collectionView.backgroundColor = #colorLiteral(red: 0.9568627477, green: 0.6588235497, blue: 0.5450980663, alpha: 1)
let constraints = [
collectionView.heightAnchor.constraint(equalToConstant: 180),
collectionView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
collectionView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
collectionView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 300)
]
NSLayoutConstraint.activate(constraints)
}
๊ฐ ์ ์ ๋์ด์ ๋์ด๋ฅผ ์ง์ ํด ์ฃผ๊ธฐ ์ํด ๋ฉ์๋๋ฅผ ์จ์ฃผ๊ฒ ์ต๋๋ค.
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
์ด ๋ฉ์๋๋ collectionView๋ฅผ ์ธ์๋ก ๊ฐ์ง๊ณ ์์ด์ ์ปฌ๋ ์ ๋ทฐ์ ๋์ด์ ๋์ด๋ ์ ์ ์๊ณ indexPath๋ ์ ์ ์๊ธฐ ๋๋ฌธ์
๊ฐ ์น์ ๋ณ๋ก ๊ฐ ์ ์ ๋์ด์ ๋์ด๋ฅผ ์ง์ ํด ์ค ์ ์์ต๋๋ค.
์ ๋ ์๋์ ๊ฐ์ด ๋์ด๋ ํ๋ฉด ๋์ด(์ปฌ๋ ์ ๋ทฐ ๋์ด), ๋์ด๋ ๊ฐ ์ ๋น ์ผ๋ถ์ ์ผ์ฉ ํด์
๊ฒน์น์ง ์๋๋ก ์น์ ๊ตฌ์ญ์ ๋๋์ด ์ฃผ์์ต๋๋ค.
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width, height: collectionView.frame.height/3)
}
์คํํด ๋ณด๋ฉด
3๊ฐ์ ์น์ ์ ๊ฐ ์ ์ด ์ง์ ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค!
ํ๋ฆฌ๊ฑฐ๋ ์ด์ํ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ ค์! ์ธ์ ๋ ์ง ํ์์ ๋๋ค~๐
'๐ iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Date์ DateFormatter๋ก ํ๊ตญ ํ์ฌ ์๊ฐ ๊ตฌํ๊ณ UILabel์ ๋ฃ์ด๋ณด๊ธฐ (0) | 2020.09.29 |
---|---|
[Swift] UICollectionViewCell ์์ UICollectionView ๋ฃ๊ธฐ (0) | 2020.09.29 |
[Swift] Anchor ์ฌ์ฉํด์ UIView ๋ฃ๊ธฐ (0) | 2020.09.28 |
[iOS] Xcode ๋ ๋ฒ์ ๊ฐ์ด ๊น๊ธฐ (0) | 2020.09.28 |
[Swift] UIViewController ์ UICollectionView ๋ฃ๊ธฐ (0) | 2020.09.28 |
๋๊ธ