custom cell을 사용해서 table view를 생성할때 cell에서 hidden처리가 이상하게 되는 경우

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • 종호
      참가자
      • 글작성 : 9
      • 답글작성 : 2

      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

          let cell: MyCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! MyCustomCell

         …

          if IndexPath.row == 0 {

              cell.myView.isHidden = true

          }

       

      위와 같은 예시 코드로 table view의 특정 row의 cell에 속해있는 UIView를 hidden처리를 하려고 했습니다.

      그런데 table view가 길어져 scroll이 될때 scroll하여 새로 보이게 되는 cell들의 hidden처리가 이상하게 되는것을 발견했습니다.

      디버깅을 해보니 scroll이 될때 IndexPath.row가 다시 0으로 초기화 되어서 그런것 같은데 

      이런 경우는 어떻게 해결을 해야 할까요???

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579
          if IndexPath.row == 0 {
      
              cell.myView.isHidden = true
      
          }
      

      코드를

      cell.myView.isHidden = (indexPath.row == 0)
      

      으로 코드를 변경해보세요.
      그리고 셀의 재사용에 대해 다시 한 번 공부해 보셔야 할겁니다.
      정말 중요한 개념이니까 꼭 알아보세요.

      • 이 답변은 야곰에 의해 4 years, 7 months 전에 수정됐습니다.
    • 멍단비
      참가자
      • 글작성 : 10
      • 답글작성 : 98

      데이터가 수천개가있다고 셀을 수천개를 만들 수가 없으니까 셀을 재사용해요.
      실제로 cellForRowAt 메소드에 print를 찍어보시면 스크롤하실떄마다 해당 메소드가 불려지는걸 아실 수 있을거에요.

      그리고 지정해놓으신대로 0번째 셀에 cell.myView.isHidden = true 처리가 되어있는데,
      스크롤을 하면서 isHidden된 셀이 ‘재사용’되어서 isHidden 처리 된 상태로 불려져서 해당 이슈가 생기는 거에요.

      ‘재사용’은 정말 중요한 부분이니까 공부해보시구, 가장 간단한 해결방법은 셀이 생성될때 초기화 메소드에
      cell.myView.isHidden = false 처리를 해주시면 해결은 되실거에요~

2 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom