cell 재사용에 대한 버그
코드의 일부를 요약합니다.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellString];
cell.textLabel.text = _leftTitles[indexPath.row];
cell.textLabel.font = fontSize_15;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
StayConfirm *model = self.datas[0];
if (model && 0 == indexPath.row) {
//
}else if (1 == indexPath.row) {
//
}else if (2 == indexPath.row) {
//
}else if (3 == indexPath.row) {
//
}else if (4 == indexPath.row) {
//
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (3 == indexPath.row) {
if (_adressIsHide == YES) {
return 80.0f;
}else {
return 78.0f;
}
}else if (4 == indexPath.row) {
return 80.0f;
}
return 44.0f;
}
그럼 문제가 생겼어요. 이 코드는 빨리 불러오기를 원했어요. 그래서 무슨 게으름을 피우고 UI 레이아웃, 논리 처리를 모두cellForRow에 썼는데...안쪽
어쩐지, 아이고, 짜임새가 좋네. 다시 보니까 머리가 너무 아파.
이렇게 쓰면 첫 번째 개발은 시간을 조금 줄일 수 있지만 후기에는 유지하기가 쉽지 않다.
그건 그렇고,
그러나 치명적인 문제는 이 코드 안의 셀은 기본적으로 하나하나가 다르지만 셀의 ID는 똑같다는 것이다. 테이블뷰를 드래그해서 셀을 리셋할 때 셀의 ID가 똑같기 때문에 셀을 리셋할 때 무작위이다. 만약에 낡은 셀의 대상이 다 풀리지 않으면 새 셀은 낡은 셀의 물건으로 리셋되어 구조의 혼란을 초래할 수 있다.
해결책
그렇다면 셀마다 다른 ID를 주어 다른 차이가 큰 셀을 다시 사용하지 않도록 하세요. 하지만 차라리 전체 뷰를 직접 쓰는 게 낫습니다.add에서 scrollView로 이동하는 것이 편리합니다.
ps:cell이 같은지 여부는 컨트롤의 종류와 수량의 차이에 달려 있습니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.