UITableViewCell 재사용에 대해(샘플 앱과 간단 해설)

9519 단어 Swift

이번 내용


  • UITableViewCell 의 재사용에 대해 조사했을 때 작성한 샘플 앱이 있었으므로, 간단한 해설과 코드입니다.

  • 샘플 앱




  • 재사용된 UITableViewCell 는 배경색을 .systemGreen 로 하고, cell.detailTextLabel.text 에 재사용되기 직전에 cell.textLabel.text 에 표시하고 있던 값을, 표시해 어느 cell 가 어디에 재사용되었는지를 볼 수 있습니다.
  • required init?(coder: NSCoder){ super.init(coder: coder) } 는 Cell의 인스턴스를 생성하는 타이밍에 처리가 작동합니다.
  • prepareForReuse()UITableView 가 가지고 있는 ReuseQueue 에서 Cell (아직 tableView에 셀이 표시되는 것은 아닙니다)
  • tableViewCell 가 표시되는 타이밍에서 처리가 작동하는 것이 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {} 입니다.
  • 모두 코드로 쓰고 있습니다. 코피페만으로 시험할 수 있으므로 좋으면 봐 주세요.
  • import UIKit
    
    class ViewController: UIViewController {
    
        let tableView = UITableView()
    
        var count = Int()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            tableView.frame = CGRect(x: view.frame.minX, y: view.frame.minY, width: view.frame.width, height: view.frame.height)
            tableView.register(CustomCell.self, forCellReuseIdentifier: "cell")
            view.addSubview(tableView)
    
            tableView.dataSource = self
        }
    
    }
    
    extension ViewController:UITableViewDataSource{
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
            return 100
        }
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
            count = count + 1
            print(count)
    
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell
    
            if cell.textLabel?.text != ""{
    
                cell.detailTextLabel?.text = cell.textLabel?.text
            }
    
            cell.textLabel?.text = String(indexPath.row)
    
            return cell
        }
    
    }
    
    class CustomCell:UITableViewCell{
    
        override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
            super.init(style: .value1, reuseIdentifier: reuseIdentifier)
    
        }
    
        required init?(coder: NSCoder) {
            super.init(coder: coder)
    
        }
    
        override func prepareForReuse() {
            super.prepareForReuse()
    
            if textLabel?.text != ""{
    
                detailTextLabel?.text = ""
                detailTextLabel?.text = textLabel!.text 
            }
            backgroundColor = .systemGreen
            print("reuse")   
        }
    
    }
    



    지적, 질문 등 있으면, 코멘트까지 부탁드립니다.

    좋은 웹페이지 즐겨찾기