Skip to content

Latest commit

ย 

History

History
107 lines (70 loc) ยท 4.37 KB

TableView.md

File metadata and controls

107 lines (70 loc) ยท 4.37 KB

TableView์˜ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํ™”๋ฉด์— Cell์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” DataSource ๋ฉ”์„œ๋“œ๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค

์ฐธ๊ณ ํ•œ ์ข‹์€ ๊ธ€

๋‹ต๋ณ€

  • TableView ๋™์ž‘ ๋ฐฉ์‹

    TableView๋Š” "ํ”„๋กœํ† ํƒ€์ž… ์…€"์„ ํ†ตํ•ด ์…€๋“ค์„ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ…Œ์ด๋ธ” ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋– ํ•œ ์…€๋“ค์„ ์‚ฌ์šฉํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ ํ•  ๊ฒƒ์ธ์ง€ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋ฅผ ์œ„ํ•ด TableView์˜ DataSource์™€ Delegate๋ฅผ ์ฑ„ํƒํ•˜๊ณ , ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด์—๊ฒŒ TableView๊ฐ€ ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์„ ์œ„์ž„ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

    ํ”„๋กœํ† ํƒ€์ž… ์…€์ด๋ž€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž„์˜๋กœ ์ง€์ •ํ•˜์—ฌ ํ…Œ์ด๋ธ”๋ทฐ ์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์…€๋“ค์˜ ์„ค๊ณ„๋„


  • ๋™์ž‘ ์ˆœ์„œ

    cell ์ƒ์„ฑ์‹œ

    • awakeFromNib() ๋กœ ์…€์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

      • tableView(_:willDisplay:forRowAt:) ์ด ๋งŒ๋“ค์–ด์ง€๋Š” ์…€๋งˆ๋‹ค ์‹คํ–‰๋œ๋‹ค.
    • ํ™”๋ฉด์— display๋˜๋Š” ์…€์ด ๋งŒ๋“ค์–ด์ง„ ํ›„, tableView(_:prefetchRowsAt:indexPath:) ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

      • prefetch๋Š” ํ™”๋ฉด์ƒ์—๋Š” ์•ˆ๋ณด์ด์ง€๋งŒ ์•ž์œผ๋กœ ๋ณด์—ฌ์งˆ ์…€๋“ค์„ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•ด์ฃผ๋Š” ์—ญํ• ์„ํ•œ๋‹ค.

    ์Šคํฌ๋กค ์‹œ

    • ์Šคํฌ๋กค์ด ์ผ์–ด๋‚˜๋ฉฐ ๋ณด์—ฌ์ง€๋Š” ์…€์— cellForRowAt, willDisplay๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  prefetchRowsAt์ด ์ž‘๋™ํ•˜๋ฉด์„œ prefetch queue์— ์žˆ๋Š” ์…€๋“ค์„ ์กฐํšŒํ•œ๋‹ค.

    • ๊ทธ ํ›„์— tableView(_:didEndDisplaying:forRowAt:)๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ display๋˜๋˜ ์…€์ด ์‚ฌ๋ผ์ง„๋‹ค.

    • ์ดํ›„๋ถ€ํ„ฐ๋Š” ์…€์ด ๋งŒ๋“ค์–ด์งˆ ๋•Œ awakeFromNib()์ด ์•„๋‹Œ prepareForReuse()๊ฐ€ ํ˜ธ์ถœ

      • prepareForReuse()์—์„œ ์…€์ด ์žฌ์‚ฌ์šฉ๋  ๋•Œ ์…€์„ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋Š” ์ž‘์—…์„ ํ•ด์ฃผ๊ณค ํ•œ๋‹ค.

  • ์ตœ์†Œํ•œ ํ•„์š”ํ•œ ํ•„์ˆ˜ ๋ฉ”์„œ๋“œ

    @required 
    // ํŠน์ • ์œ„์น˜์— ํ‘œ์‹œํ•  ์…€์„ ์š”์ฒญํ•˜๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, cellForRowAt: IndexPath) 
    
    // ๊ฐ ์„น์…˜์— ํ‘œ์‹œํ•  ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฌป๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, numberOfRowsInSection: Int)

๋” ๋‚˜์•„๊ฐ€๊ธฐ

ํ•„์ˆ˜๊ตฌํ˜„์„ ์ œ์™ธํ•œ TableView ๋ฉ”์„œ๋“œ

  • UITableViewDelegate Methods - MVC์ค‘ Controller๋ถ€๋ถ„
    // ์ง€์ •๋œ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, didSelectRowAt: IndexPath)
    
    // ์ง€์ •๋œ ํ–‰์˜ ์„ ํƒ์ด ํ•ด์ œ๋˜์—ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, didDeselectRowAt: IndexPath)
    
    // ํŠน์ • ์œ„์น˜ ํ–‰์˜ ๋†’์ด๋ฅผ ๋ฌป๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, heightForRowAt: IndexPath)
    
    // ํŠน์ • ์œ„์น˜ ํ–‰์˜ ๋“ค์—ฌ์“ฐ๊ธฐ ์ˆ˜์ค€์„ ๋ฌป๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, indentationLevelForRowAt: IndexPath)
    
    // ํŠน์ • ์„น์…˜์˜ ํ—ค๋”๋ทฐ ๋˜๋Š” ํ‘ธํ„ฐ๋ทฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, viewForHeaderInSection: Int)
    func tableView(UITableView, viewForFooterInSection: Int)
    
    // ํŠน์ • ์„น์…˜์˜ ํ—ค๋”๋ทฐ ๋˜๋Š” ํ‘ธํ„ฐ๋ทฐ์˜ ๋†’์ด๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, heightForHeaderInSection: Int)
    func tableView(UITableView, heightForFooterInSection: Int)
    
    // ํ…Œ์ด๋ธ”๋ทฐ๊ฐ€ ํŽธ์ง‘๋ชจ๋“œ์— ๋“ค์–ด๊ฐ”์Œ์„ ์•Œ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, willBeginEditingRowAt: IndexPath)
    
    // ํ…Œ์ด๋ธ”๋ทฐ๊ฐ€ ํŽธ์ง‘๋ชจ๋“œ์—์„œ ๋น ์ ธ๋‚˜์™”์Œ์„ ์•Œ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, didEndEditingRowAt: IndexPath?)
  • UITableViewDataSource - MVC์ค‘ Model๋ถ€๋ถ„
    @optional
    // ํ…Œ์ด๋ธ”๋ทฐ์˜ ์ด ์„น์…˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฌป๋Š” ๋ฉ”์„œ๋“œ
    func numberOfSections(in: UITableView)
    
    // ํŠน์ • ์„น์…˜์˜ ํ—ค๋” ํ˜น์€ ํ‘ธํ„ฐ ํƒ€์ดํ‹€์„ ๋ฌป๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, titleForHeaderInSection: Int)
    func tableView(UITableView, titleForFooterInSection: Int)
    
    // ํŠน์ • ์œ„์น˜์˜ ํ–‰์„ ์‚ญ์ œ ๋˜๋Š” ์ถ”๊ฐ€ ์š”์ฒญํ•˜๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, commit: UITableViewCellEditingStyle, forRowAt: IndexPath)
    
    // ํŠน์ • ์œ„์น˜์˜ ํ–‰์ด ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ์ง€ ๋ฌป๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, canEditRowAt: IndexPath)
    
    // ํŠน์ • ์œ„์น˜์˜ ํ–‰์„ ์žฌ์ •๋ ฌ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฌป๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, canMoveRowAt: IndexPath)
    
    // ํŠน์ • ์œ„์น˜์˜ ํ–‰์„ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์˜ฎ๊ธฐ๋Š” ๋ฉ”์„œ๋“œ
    func tableView(UITableView, moveRowAt: IndexPath, to: IndexPath)