๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[iOS/Swift] UITableView Header ๋†’์ด ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ

by ํ‹ด๋”” 2022. 8. 17.
728x90
๋ฐ˜์‘ํ˜•
  • ์Šคํฌ๋กค ์‹œ UITableView Header๋ฅผ ๊ณ ์ • ์‹œํ‚ฌ ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ ํ—ค๋”์— ์žˆ๋Š” ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ—ค๋”์˜ ๋†’์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
  • ex) ํ—ค๋” ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ๊ฒ€์ƒ‰ ์˜์—ญ ๋…ธ์ถœ

 

  • UITableViewHeaderFooterView ์— ๋†’์ด ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ
    func toggleHeight() {
        containerView.snp.updateConstraints { make in
            make.height.equalTo(searchButton.tag).priority(.high)
        }
    }

 

  • header ์ง€์ •ํ•˜๋Š” Delegate์—์„œ ํ—ค๋”์˜ ๋ฒ„ํŠผ์— addTarget ํ•ด์คŒ
  • ์ด๋•Œ ์—ฐ๊ฒฐํ•œ ํ•จ์ˆ˜๋Š” updateHeader
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let cell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "TransactionHeaderView") as? TransactionHeaderView
        cell?.searchButton.addTarget(self, action: #selector(updateHeader), for: .touchUpInside)
        return cell
    }

 

  • target์œผ๋กœ ์ง€์ •ํ•ด ์ค€ updateHeader ์—์„œ ํ—ค๋”๋ฅผ ์ฐพ์•„ ์คŒ
    @objc func updateHeader() {
        let header = tableView.headerView(forSection: 0) as? TransactionHeaderView
    }

 

  • ํ…Œ์ด๋ธ” ๋ทฐ ์—…๋ฐ์ดํŠธ์‹œ beginUpdates -> endUpdates ํ•ด์คŒ
  • updateHeader ํ•จ์ˆ˜์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€
        if let header = header {
            tableView.beginUpdates()
            header.toggleHeight()
            tableView.endUpdates()
        }
  • ํ—ค๋” ๋ทฐ ํด๋ž˜์Šค์—์„œ ์ž‘์„ฑํ•œ ๋†’์ด ์—…๋ฐ์ดํŠธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ

 

>>> ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๊ณต์œ  ๋ถ€ํƒ๋“œ๋ ค์š”!!

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€