์๋ ํ์ธ์~!
์ค๋์ ์๋ก์ด ํ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ์ ๋๋ค!
ํ์๋ค๊ณผ ์์ ๋์ ํผ์ค๋ ๋ชจ๋น๋ฆฌํฐ์ฑ์ ๊ตฌํํด๋ณด๊ธฐ๋ก ํ์ด์~!
MapKit์ ์ฒ์ ์ฌ์ฉํด ๋ด์ ๊ผญ ๋์ ํด๋ณด๊ณ ์ถ์๋ ์ฑ์ด์์ต๋๋ค!
์ด๊ธฐ ์์ด์ด ํ๋ ์
์ด๊ธฐ์ ์์ด์ด ํ๋ ์์ ๋๋ค. ์ ํฌ๋ GCOO ์ฑ์ ๋ชจ๋ฐฉํ์ฌ ์ฑ์ ๋์์ธํ์์ต๋๋ค~!
์ด 5๊ฐ์ ํ์ด์ง๋ก ๊ตฌ์ฑ๋์ด์์ต๋๋ค.
- ๋ก๊ทธ์ธ ํ๋ฉด
- ํ์๊ฐ์ ํ๋ฉด
- ๋งต ํ๋ฉด
- ์ฌ์ฉ์ ํ๋ฉด
- ๋์ฌ ํ๋ฉด
์ด๋ฒ์ ์ ๊ฐ ๋งก์ ๊ตฌํ ๋ถ๋ถ์ ์ฌ์ฉ์ ํ๋ฉด์ ๋๋ค!โจ
์ฌ์ฉ์ ํ๋ฉด ( ๋ง์ดํ์ด์ง ) ๊ตฌํ
๊ตฌํ ์ ๋ก์ง ๊ตฌ์ํ๊ธฐ
์ ๋ชฉ ๋ถ๋ถ์ ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ด ์๋์ผ๋ก ์์ฑ์ด ๋๋ ๋ด๋น๊ฒ์ด์ ๋ฐ๋ฅผ ์ด์ฉํ์ฌ,
ํ๋กํ, ๋์ฌ์ค, ์ด์ ๋์ฌ ๋ชฉ๋ก ๋ถ๋ถ์ ํ ์ด๋ธ ๋ทฐ์ ์ธ์ ์ ๋๋์ด์ ๊ตฌํ์ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ด์~!
? View๋ก ๊ตฌํํด๋ ๋๋๋ฐ ์ ๊ตณ์ด ํ ์ด๋ธ ๋ทฐ๋ฅผ ์ฌ์ฉํ๋
์ฌ์ฉ์๊ฐ ํฅ๋ณด๋๋ฅผ ๋์ฌ์ค์ผ ๋๋ ๋์ฌ์ค ๋ถ๋ถ์ด ์ฌ์ฉ์ ์ ๋ณด ๋ถ๋ถ์์ ๋ณด์ฌ์ผ ํ๊ณ , ์ฌ์ฉ์๊ฐ ํฅ๋ณด๋๋ฅผ ๋์ฌ์ค์ด์ง ์์ ๋๋ ๋์ฌ์ค ๋ถ๋ถ์ด ๋ณด์ด์ง ์์ ์ด์ ๋์ฌ ๋ชฉ๋ก ๋ถ๋ถ์ด ํ๋กํ ๋ฐ๋ก ์๋๋ก ์ค๊ฒ๋ ์คํ ๋ ์ด์์์ ์กฐ์ ํด์ผ ํ๋๋ฐ, ๊ทธ ๋ถ๋ถ์์ ์ธ์ ์ ๋๋์ด์ ์ธ์ ์ ์์ ๋ ๋ฐฉ๋ฒ์ด ๊ตฌํํ๊ธฐ์ ํธํ ๊ฒ ๊ฐ์์ด์!
๋ํ "๋์ฌ์ค"์ ๋ด์ฉ ๋ถ๋ถ๊ณผ "์ด์ ๋์ฌ ๋ชฉ๋ก"์ ๋ด์ฉ ๋ถ๋ถ์ ํํ๊ฐ ์ผ์นํ๋ ๋ถ๋ถ์์ ๋ฐ๋ณต์ ์ธ View๋ฅผ ๊ทธ๋ฆฌ๋ ๋์ ๊ฐ์ cell๋ก ๊ตฌํ์ ํ๋ ๋ด์ฉ์ ๋ฐ๊พธ๋ ์์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ ๋ ์ฌ๋ ธ์ต๋๋ค. ์ด์ ๋์ฌ ๋ชฉ๋ก ๋ถ๋ถ์ ์๋ TableView๋ก ๊ทธ๋ ค์ผ ํ๋ ํด๋น cell์ ๋์ฌ์ค์์ ์ฌ์ฌ์ฉํ๊ณ ์ ํ์ด์!
"ํ๋กํ", "๋์ฌ์ค", "์ด์ ๋์ฌ ๋ชฉ๋ก" ๋ผ๋ฒจ๋ ๋์ผํ ๊ธ๊ผด๊ณผ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด Section์ ์ ๋ชฉ์ผ๋ก ๋ค์ด๊ฐ๋ค๋ฉด ์ฝ๋ ์ค๋ณต์ ๋ฐฉ์งํ ์๋ ์์์ต๋๋ค!
์ต์ข ์ ์ผ๋ก ์ ์ฒด 3๊ฐ์ section์ผ๋ก ๋๋์ด ํ๋กํ ๋ถ๋ถ์ cell๊ณผ ๋์ฌ์ค/์ด์ ๋์ฌ ๋ชฉ๋ก์ cell์ xib๋ก ๊ตฌํํ์ฌ ์ฌ์ฉํ๊ธฐ๋ก ํ์ด์!
UI ์์ ํ๊ธฐ
์ฐ์ TableView์ ๋ก๊ทธ์์ ๋ฒํผ์ UI๋ฅผ ์ก์์ฃผ์์ด์!
cell๋ค๋ ๋ฐ๋ก xib ํ์ผ์ ๋ง๋ค์ด์ ๊ตฌํํด ์ฃผ์์ต๋๋ค!
UI ์ฐ๊ฒฐํ๊ธฐ
๊ฐ๊ฐ์ UI์ ViewController ๊ฐ์ object๋ค์ ์ฐ๊ฒฐํด ์ฃผ์์ต๋๋ค.
UserViewController.swift
@IBOutlet weak var userTableView: UITableView!
@IBOutlet weak var logoutButton: UIButton!
UserDefaultTableViewCell.swift
@IBOutlet weak var firstLabel: UILabel!
@IBOutlet weak var LastLabel: UILabel!
RentalListTableViewCell.swift
@IBOutlet weak var rentalStartTimeLabel: UILabel!
@IBOutlet weak var kickBoardIDLabel: UILabel!
@IBOutlet weak var kickBoardNumberLabel: UILabel!
@IBOutlet weak var rentalTimeLabel: UILabel!
@IBOutlet weak var rentalPriceLabel: UILabel!
TableView ๊ตฌํํ๊ธฐ
ViewController์ ์ฝ๋์ TableView์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌ์์ผ ์ฃผ๊ธฐ ์ํด์ ๋ฐ๋ก swift ํ์ผ์ ์์ฑํด ์ฃผ์์ต๋๋ค.
์ฐ์ tableView๋ฅผ ์ธํ ํ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ ๊ธฐ๋ณธ์ ์ธ delegate์ dataSource๋ฅผ ์ค์ ํด ์ฃผ์๊ณ ์!
func setUserTableView() {
userTableView.delegate = self
userTableView.dataSource = self
let nib1 = UINib(nibName: "UserDefaultTableViewCell", bundle: nil)
let nib2 = UINib(nibName: "RentalListTableViewCell", bundle: nil)
userTableView.register(nib1, forCellReuseIdentifier: "userDefaultCell")
userTableView.register(nib2, forCellReuseIdentifier: "rentalListCell")
}
๋ ๊ฐ์ง์ cell XIB ํ์ผ์ ์ฐ๊ฒฐํด ์ฃผ๋ ์ฝ๋๋ ๋ฃ์ด์ฃผ์์ต๋๋ค.
cell์์ identifier ์ค์ ํ๋ ๊ฒ์ ๊น๋จน์ผ์๋ฉด ์ ๋ผ์~!!!
TableView์ Section ์ ๊ฒฐ์
// MARK: - ํ
์ด๋ธ ๋ทฐ์ Section ์ ๊ฒฐ์
func numberOfSections(in tableView: UITableView) -> Int {
// ๋์ฌ์ค์ด๋ฉด section ์ 3๊ฐ / ๋์ฌ์ค์ด ์๋๋ผ๋ฉด section ์ 2๊ฐ
if userData.status {
return 3
}else {
return 2
}
}
์ ์ ๊ฐ ํฅ๋ณด๋๋ฅผ ๋์ฌ์ค์ด๋ผ๋ฉด 3๊ฐ์ Section์ ๋์ฌ์ค์ด ์๋๋ผ๋ฉด 2๊ฐ์ Section์ ์ถ๋ ฅํ๋๋ก ๊ตฌํํ์์ด์!
TableView์ SectionHeader ์ค์
func tableView(_ tableView: UITableView,
viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView()
headerView.backgroundColor = .white
// headerLabel ์ค์
let headerLabel = UILabel(frame: CGRect(x: 20, y: 0, width: tableView.bounds.size.width, height: 45))
headerLabel.font = UIFont.systemFont(ofSize: 16, weight: .bold)
headerLabel.textColor = UIColor.black // ํ
์คํธ ์์ ์ค์
// hearerBorderView ์ค์
let borderWidth: CGFloat = tableView.bounds.size.width - 40
let borderX: CGFloat = (tableView.bounds.size.width - borderWidth) / 2
let headerBorderView = UIView(frame: CGRect(x: borderX, y: 40, width: borderWidth, height: 2))
headerBorderView.backgroundColor = .black
// ๋์ฌ์ค์ด๋ฉด section ์ 3๊ฐ / ๋์ฌ์ค์ด ์๋๋ผ๋ฉด section ์ 2๊ฐ
if userData.status {
switch section {
case 0: headerLabel.text = "ํ๋กํ"
case 1: headerLabel.text = "๋์ฌ์ค"
case 2: headerLabel.text = "์ด์ ๋์ฌ ๋ชฉ๋ก"
default: headerLabel.text = ""
}
}else {
switch section {
case 0: headerLabel.text = "ํ๋กํ"
case 1: headerLabel.text = "์ด์ ๋์ฌ ๋ชฉ๋ก"
default: headerLabel.text = ""
}
}
headerView.addSubview(headerLabel)
return headerView
}
tableview์ header ๋ถ๋ถ์ Lable์ ์ค์ ํ๊ณ ๊ทธ ์๋ border๋ฅผ ์ถ๊ฐํ ๋ค section์ ๋ฐ๋ฅธ header์ ์ด๋ฆ์ ์ค์ ํด ์ฃผ์์ด์!
TableView์ Section์ ๋ฐ๋ฅธ cell์ ๊ฐ์
// MARK: - tableView์ ์
์ ๊ฐ์
func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
// ๋์ฌ์ค์ด๋ฉด section ์ 3๊ฐ / ๋์ฌ์ค์ด ์๋๋ผ๋ฉด section ์ 2๊ฐ
if userData.status {
switch section {
case 0: 2
case 1: 1
case 2: userData.rentalList.count
default: 0
}
}else {
switch section {
case 0: 2
case 1: userData.rentalList.count
default: 0
}
}
}
์ฌ์ฉ์์ ๋์ฌ์ค ์ฌ๋ถ์ ๋ฐ๋ฅธ section ์๊ฐ ๋ฌ๋ผ์ง๋ฏ๋ก ๊ฐ๊ฐ์ section์์ cell ๊ฐ์๋ ๋ฐ๋ก ์ค์ ํด์ฃผ์ด์ผ ํ์ต๋๋ค!
Section 0 ๋ถ๋ถ์ ์ฌ์ฉ์์ ์ด๋ฆ๊ณผ ์์ด๋๋ง ๋ณด์ผ ์์ ์ด๋ผ 2๋ก ๊ณ ์ ํ์๊ณ , ์ฌ์ฉ์๊ฐ ๋์ฌ์ค์ผ ๋์ Section 1 ๋ถ๋ถ์ ์ฌ์ฉ์๊ฐ ํ์ฌ ํ๊ณ ์๋ ํฅ๋ณด๋ ์ ๋ณด๋ง์ ์ถ๋ ฅํ๊ณ , ์ฌ์ฉ์๋ ํ ๋ฒ์ 1๊ฐ์ ํฅ๋ณด๋๋ง ํ ์ ์์ผ๋ฏ๋ก 1๋ก ๊ณ ์ ํด ๋์์ต๋๋ค~!
TableView์ section์ ๋ฐ๋ฅธ ๋ค๋ฅธ Cell ์ถ๋ ฅ
// MARK: - tableView์ cell ์ถ๋ ฅ
func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// ๋์ฌ์ค์ด๋ฉด section ์ 3๊ฐ / ๋์ฌ์ค์ด ์๋๋ผ๋ฉด section ์ 2๊ฐ
if userData.status {
switch indexPath.section {
case 0:
return setUserDefaultCell(tableView, indexPath: indexPath)
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: "rentalListCell", for: indexPath) as! RentalListTableViewCell
cell.kickBoardIDLabel.text = currentRental.kickBoardID
cell.kickBoardNumberLabel.text = "\(currentRental.kickBoardNumber)"
cell.rentalPriceLabel.text = setPriceLabel(price: currentRental.rentalPrice)
cell.rentalStartTimeLabel.text = currentRental.rentalStartTime
if let rentalTotalTime = currentRental.rentalTotalTime {
cell.rentalTimeLabel.text = "\(rentalTotalTime)๋ถ"
}
return cell
case 2:
return setUserRentalListCell(tableView, indexPath: indexPath)
default:
fatalError("Unknown section")
}
}else {
switch indexPath.section {
case 0:
return setUserDefaultCell(tableView, indexPath: indexPath)
case 1:
return setUserRentalListCell(tableView, indexPath: indexPath)
default:
fatalError("Unknown section")
}
}
}
์ฌ์ฉ์์ ํฅ๋ณด๋ ์ฌ์ฉ ์ค์ ๋ฐ๋ฅธ section ๋ณ๊ฒฝ๊ณผ ํด๋น section์ cell์ ์ค์ ํ๋ ๋ถ๋ถ์ ๋๋ค.
์ฌ์ฉ์ค๊ณผ ์ฌ์ฉ ์ค์ด ์๋ ๋ ๋ชจ๋ "ํ๋กํ"์ ๋ถ๋ถ๊ณผ "์ด์ ๋์ฌ ๋ชฉ๋ก"์ ๋ถ๋ถ์ด ๊ฐ์ ์ฝ๋๋ฅผ ๋ฐ๋ณตํด์ผ ๋์ด์ ์ฝ๋์ ์ค๋ณต ๋ฐฉ์ง๋ฅผ ์ํด ๋ฐ๋ก ํจ์๋ฅผ ๋ง๋ค์ด์ฃผ์์ต๋๋ค.
func setUserDefaultCell(_ tableView: UITableView,
indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "userDefaultCell", for: indexPath) as! UserDefaultTableViewCell
let cellConfigure: [(String,String)] = [("์ด๋ฆ", userData.userName), ("์์ด๋", userData.id)]
cell.firstLabel.text = cellConfigure[indexPath.row].0
cell.LastLabel.text = cellConfigure[indexPath.row].1
return cell
}
func setUserRentalListCell(_ tableView: UITableView,
indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "rentalListCell", for: indexPath) as! RentalListTableViewCell
cell.kickBoardIDLabel.text = userData.rentalList[indexPath.row].kickBoardID
cell.kickBoardNumberLabel.text = "\(userData.rentalList[indexPath.row].kickBoardNumber)"
cell.rentalPriceLabel.text = setPriceLabel(price: userData.rentalList[indexPath.row].rentalPrice)
cell.rentalStartTimeLabel.text = userData.rentalList[indexPath.row].rentalStartTime
if let rentalTotalTime = userData.rentalList[indexPath.row].rentalTotalTime {
cell.rentalTimeLabel.text = "\(rentalTotalTime)๋ถ"
}
return cell
}
TableView์ Section Header์ Footer์ ๋์ด ์ค์
// ์น์
ํค๋์ ๋์ด๋ฅผ ์ค์
func tableView(_ tableView: UITableView,
heightForHeaderInSection section: Int) -> CGFloat {
return 45
}
// ์น์
ํธํฐ์ ๋์ด๋ฅผ ์ค์
func tableView(_ tableView: UITableView,
heightForFooterInSection section: Int) -> CGFloat {
return 5
}
ํค๋์ ํธํฐ์ ๋์ด ์ค์ ํจ์๋ฅผ ์ด์ฉํด ํค๋ ๋ถ๋ถ์ Section ๋์ด๋ฅผ ์กฐ์ ํ์์ต๋๋ค.
์ฒ ๋จ์, ์ฐ๊ธฐ
func setPriceLabel(price: Int) -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
guard let priceString = numberFormatter.string(from: NSNumber(value: price)) else { return "" }
return priceString + "์"
}
NumberFormatter๋ฅผ ์ด์ฉํ ์ฒ ๋จ์์ , ์ฐ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ฌธ์ ์ ( cell์ separator ์ ์ ์๋ค ๊ฐ๊ฒฉ์ ๋ค๋ฆ )
์ค๋๋ ์ด๊น์์ด ๋ฑ์ฅํ๋ ๋ฌธ์ ์ ์ UI์ ์ผ๋ก cell๊ณผ cell ์ฌ์ด์ ์ ์ธ separator ์ ์ด ๋ง์์ ๋ค์ง ์์์ต๋๋ค.
cell ์ฌ์ด์ ์ ์ด ์์ ์ฌ์ง์ฒ๋ผ ์๋ค์ ์ผ์ ํ ๊ฐ๊ฒฉ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด ์๋ ์๋์ ์ฌ์ง์ฒ๋ผ ์์ ๋ถ๋ถ์ ๊ฐ๊ฒฉ๋ง ๋์ด์ ธ ์์ด์ ์ ๊ฒฝ์ด ์ฐ์ด๋๋ผ๊ณ ์~!
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ View๋ก ์ง์ ๊ฐ๊ฒฉ ์ ์ ๊ทธ๋ฆฌ๋ ๊ฒ์ ๋๋ค.
์ฐ์ cell์ ์ ์ ์์ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด ์ค๋๋ค.
userTableView.separatorStyle = .none
์ ๋ ์์ ์ฝ๋๋ฅผ ์ฒ์ tableView๋ฅผ ์ธํ ํ๋ ํจ์์ ๋ฃ์ด์ฃผ์์ด์!
Cell์ ํ๋จ์ UIView๋ฅผ ์ถ๊ฐํด ์ํ๋ ๋ชจ์์ ์ ์ ๊ทธ๋ ค์ฃผ์์ต๋๋ค.
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ
tableView์ separator์ ์ฌ๋ฐฑ ์ค์ ์ ํตํด์ ์ฝ๋๋ก ์์ ํ๋ ๊ฒ์ ๋๋ค.
tableView.separatorInsetReference = .fromCellEdges
[ SeparatorInsetReference ]
- Automatic (default) : ์ผ์ชฝ์ 15 ํฌ์ธํธ์ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง
- Custom : ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ ์ํ๋ ๊ฐ๊ฒฉ์ ์ค์
- fromCellEdges : ์ ๋์ ์ฌ๋ฐฑ์ ์ค
- fromAutomaticInsets : ์ฌ์ฉ ํ๊ฒฝ์ ๋ฐ๋ผ ์๋์ผ๋ก ์ค์ ํด ์ค. ( ๊ฒน์นจ ๋ฐฉ์ง )
์ถ๊ฐ๋ก separator์ ์์ด๋ ์คํ์ผ๋ ์ค์ ํ ์ ์์ต๋๋ค.
[ separator ์ ์ค์ ]
tableView.separatorColor = .black
[ separator ์คํ์ผ ์ค์ ]
tableView.separatorStyle = .singleLine
- none : ์ ์ ํ์ํ์ง ์์
- singleLine(default) : ์ ์ ํ๋๋ง ํ์
- singleLineEtched : ์ง๊ธ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์.
์ ์ฒด ์ฝ๋
import Foundation
import UIKit
extension UserViewController: UITableViewDelegate, UITableViewDataSource {
func setUserTableView() {
userTableView.delegate = self
userTableView.dataSource = self
userTableView.separatorStyle = .none
let nib1 = UINib(nibName: "UserDefaultTableViewCell", bundle: nil)
let nib2 = UINib(nibName: "RentalListTableViewCell", bundle: nil)
userTableView.register(nib1, forCellReuseIdentifier: "userDefaultCell")
userTableView.register(nib2, forCellReuseIdentifier: "rentalListCell")
}
func setUserDefaultCell(_ tableView: UITableView,
indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "userDefaultCell", for: indexPath) as! UserDefaultTableViewCell
let cellConfigure: [(String,String)] = [("์ด๋ฆ", userData.userName), ("์์ด๋", userData.id)]
cell.firstLabel.text = cellConfigure[indexPath.row].0
cell.LastLabel.text = cellConfigure[indexPath.row].1
return cell
}
func setUserRentalListCell(_ tableView: UITableView,
indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "rentalListCell", for: indexPath) as! RentalListTableViewCell
cell.kickBoardIDLabel.text = userData.rentalList[indexPath.row].kickBoardID
cell.kickBoardNumberLabel.text = "\(userData.rentalList[indexPath.row].kickBoardNumber)"
cell.rentalPriceLabel.text = setPriceLabel(price: userData.rentalList[indexPath.row].rentalPrice)
cell.rentalStartTimeLabel.text = userData.rentalList[indexPath.row].rentalStartTime
if let rentalTotalTime = userData.rentalList[indexPath.row].rentalTotalTime {
cell.rentalTimeLabel.text = "\(rentalTotalTime)๋ถ"
}
return cell
}
func setPriceLabel(price: Int) -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
guard let priceString = numberFormatter.string(from: NSNumber(value: price)) else { return "" }
return priceString + "์"
}
// MARK: - ํ
์ด๋ธ ๋ทฐ์ Section ์ ๊ฒฐ์
func numberOfSections(in tableView: UITableView) -> Int {
// ๋์ฌ์ค์ด๋ฉด section ์ 3๊ฐ / ๋์ฌ์ค์ด ์๋๋ผ๋ฉด section ์ 2๊ฐ
if userData.status {
return 3
}else {
return 2
}
}
func tableView(_ tableView: UITableView,
heightForHeaderInSection section: Int) -> CGFloat {
return 45
}
// ์น์
ํธํฐ์ ๋์ด๋ฅผ ์ค์
func tableView(_ tableView: UITableView,
heightForFooterInSection section: Int) -> CGFloat {
return 5
}
func tableView(_ tableView: UITableView,
viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView()
headerView.backgroundColor = .white
let headerLabel = UILabel(frame: CGRect(x: 20, y: 0, width: tableView.bounds.size.width, height: 45))
headerLabel.font = UIFont.systemFont(ofSize: 16, weight: .bold)
headerLabel.textColor = UIColor.black // ํ
์คํธ ์์ ์ค์
let borderWidth: CGFloat = tableView.bounds.size.width - 40
let borderX: CGFloat = (tableView.bounds.size.width - borderWidth) / 2
let headerBorderView = UIView(frame: CGRect(x: borderX, y: 40, width: borderWidth, height: 2))
headerBorderView.backgroundColor = .black
// ๋์ฌ์ค์ด๋ฉด section ์ 3๊ฐ / ๋์ฌ์ค์ด ์๋๋ผ๋ฉด section ์ 2๊ฐ
if userData.status {
switch section {
case 0: headerLabel.text = "ํ๋กํ"
case 1: headerLabel.text = "๋์ฌ์ค"
case 2: headerLabel.text = "์ด์ ๋์ฌ ๋ชฉ๋ก"
default: headerLabel.text = ""
}
}else {
switch section {
case 0: headerLabel.text = "ํ๋กํ"
case 1: headerLabel.text = "์ด์ ๋์ฌ ๋ชฉ๋ก"
default: headerLabel.text = ""
}
}
headerView.addSubview(headerLabel)
headerView.addSubview(headerBorderView)
return headerView
}
// MARK: - tableView์ ์
์ ๊ฐ์
func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
// ๋์ฌ์ค์ด๋ฉด section ์ 3๊ฐ / ๋์ฌ์ค์ด ์๋๋ผ๋ฉด section ์ 2๊ฐ
if userData.status {
switch section {
case 0: 2
case 1: 1
case 2: userData.rentalList.count
default: 0
}
}else {
switch section {
case 0: 2
case 1: userData.rentalList.count
default: 0
}
}
}
// MARK: - tableView์ cell ์ถ๋ ฅ
func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// ๋์ฌ์ค์ด๋ฉด section ์ 3๊ฐ / ๋์ฌ์ค์ด ์๋๋ผ๋ฉด section ์ 2๊ฐ
if userData.status {
switch indexPath.section {
case 0:
return setUserDefaultCell(tableView, indexPath: indexPath)
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: "rentalListCell", for: indexPath) as! RentalListTableViewCell
cell.kickBoardIDLabel.text = currentRental.kickBoardID
cell.kickBoardNumberLabel.text = "\(currentRental.kickBoardNumber)"
cell.rentalPriceLabel.text = setPriceLabel(price: currentRental.rentalPrice)
cell.rentalStartTimeLabel.text = currentRental.rentalStartTime
if let rentalTotalTime = currentRental.rentalTotalTime {
cell.rentalTimeLabel.text = "\(rentalTotalTime)๋ถ"
}
return cell
case 2:
return setUserRentalListCell(tableView, indexPath: indexPath)
default:
fatalError("Unknown section")
}
}else {
switch indexPath.section {
case 0:
return setUserDefaultCell(tableView, indexPath: indexPath)
case 1:
return setUserRentalListCell(tableView, indexPath: indexPath)
default:
fatalError("Unknown section")
}
}
}
}
์ ์ฉํ๋ฉด