ZOOC 개발하면서 펫 등록 part에서 셀의 인덱스가 꼬이는 문제가 발생했고,
데모데이날 피카북 팀한테…. 그리고 QA 시간과 승찬이형한테 문제점을 지적받고
공부를 해서 고쳐야겠다고 느꼈다!
그리고 소복소복 코드를 보면서 해결을 했다 Shout out sbsb
딱 정의하면 셀을 재사용해서 생기는 문제이다!
만약 저기 안에 들어있는 textField를 각각 만들어주고 +버튼 누르면 hidden 풀고 - 누르면 hidden하고 했으면 이런 문제는 일어나지 않겠지만… 우린 테이블뷰로 셀을 재사용 했기 때문에 indexPath가 꼬이게 되는 것이다!
더 자세히 생각해보면 아래의 코드처럼 셀을 지정하고, dataBind로 연결을 한다고 생각을 해보자.
그럼 첫번째로 저 셀 안에 있는 컴포넌트들의 index는 어케 알게 되는거지..? 라는 문제가 생기게 되고
저렇게 셀이 만들어졌을때 지정된 indexPath를 인덱스로 지정하고 reloadData를 해서 바뀌는 index는 어케 수행되는건지..? 알 수가 없다!
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: OnboardingRegisterPetTableViewCell.cellIdentifier, for: indexPath)
as? OnboardingRegisterPetTableViewCell else { return UITableViewCell() }
cell.delegate = self
cell.dataBind(model: petRegisterData[indexPath.row], index: indexPath.row, petCount: petRegisterData.count)
return cell
}
func dataBind(model: OnboardingPetRegisterModel, index: Int, petCount: Int) {
updateUI(model: model, index: index, petCount: petCount)
}
셀의 indexPath와 그 안에 컴포넌트의 tag값을 매칭해야 된다!
일단 셀 안에 컴포넌트들에게 “야 너도 너가 속해있는 셀이랑 같은 indexPath야!” 라고 알려줘야 된다.
그러기 위해서 우리는 tag라는 개념을 사용할 것이다.
공식문서에서 tag는 아래와 같이 소개하고 있다.