티스토리 뷰
TableViewCell이나 CollectionViewCell은 공통점이 있습니다.
그건 바로 셀을 재사용한다는 건데요.
만약 30개의 셀에 각각의 다른 내용을 넣어야한다고 가정했을 때
30개의 셀을 만들어서 관리하면 그만큼 자원을 많이 가져가기 때문에
셀을 몇개만 만들어놓고 돌려씁니다.
extension SecondViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 30
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "secondCell", for: indexPath)
cell.textLabel?.text = "\(indexPath.row)"
if indexPath.row == 5 {
cell.backgroundColor = .black
}
return cell
}
}
30개의 셀중에서 6번째 줄에 검정색으로 칠해보겠니다.
6번째 줄에 검정색으로 줄이 생겼습니다.
이걸 스크롤하게되면
다른 줄에서도 검정색이 칠해지네요.
indexPath.row == 5에서 검정색으로 칠했던 셀이 그대로 재사용돼서 그렇습니다.
근데 숫자는 제대로 나옵니다.
우리가 셀의 숫자들은 indexPath.row 마다 설정을 해줬기 때문에 그렇습니다.
그러면 배경색도 indexPath.row마다 설정을 해준다면 이러한 문제가 생기지 않습니다.
extension SecondViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 30
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "secondCell", for: indexPath)
cell.textLabel?.text = "\(indexPath.row)"
if indexPath.row == 5 {
cell.backgroundColor = .black
} else {
cell.backgroundColor = .systemBackground
}
return cell
}
}
포인트는 "모든 indexPath.row마다 값을 정해준다" 입니다.
CollectionView에서도 똑같습니다.
특정 조건에서 변화를 줬다면 그 조건에 해당하지 않을때는 초기화해주는 코드를 작성해주시면 됩니다.
!다른 방법
prepareForReuse()
셀을 재사용할 때 사용할 수 있는 메서드입니다.
UICollectionViewCell이나 UITableViewCell에서 사용할 수 있는데
성능 이슈 때문에 알파값, 선택 상태 등컨텐츠와 관련 없는 속성들만 reset하는데 사용하길 권장합니다.
'iOS' 카테고리의 다른 글
[iOS] iOS14+ 위젯 최신화하기 번역 (0) | 2020.12.07 |
---|---|
[iOS] prepare segue 데이터 전달, NavigationController segue (0) | 2020.12.01 |
[iOS] Swift CollectionViewCell Size 컬렉션뷰 셀 사이즈 (0) | 2020.11.20 |
[iOS] Swift UNUserNotificationCenter 특정 시간에 알림, 로컬노티 보내기, Date()를 DateComponents로 변환 (0) | 2020.11.19 |
[iOS] Date() 계산하기, swift 날짜 시간 더하기, 비교하기 (0) | 2020.11.18 |
댓글
공지사항