인프런 커뮤니티 질문&답변

seonjukim님의 프로필 이미지

작성한 질문수

야곰의 iOS 프로그래밍

돌아보기 - 뷰의 재사용

prepareForReuse 사용 방법

작성

·

461

0

안녕하세요, 찾아보니 말씀해주신 것처럼 셀을 초기화하는 메소드가 UITableViewCell의 prepareForReuse()인 것 같은데,

UITableViewController를 상속받은 이 클래스 안에서 prepareForReuse 메소드를 사용할 수 있는 방법이 있나요?

상속부에 UITableViewCell을 추가하려 하니 클래스에 다중상속이 불가능하다는 오류가 떠서, 이 상황에서는 셀을 어떻게 초기화해주어야 하는 건지 궁금합니다.

답변 1

0

yagom님의 프로필 이미지
yagom
지식공유자

안녕하세요, 스위프트의 클래스는 다중상속이 불가합니다.

prepareForReuse 메서드를 활용하기 위해서는 UITableViewCell 클래스를 상속받은 새로운 셀 클래스를 생성해준 후 그 내부에 prepareForReuse 메서드를 override 하여 사용할 수 있습니다.

그 후, 새로 만든 셀 클래스를 테이블뷰의 셀 클래스로 지정하여 사용합니다.

아래 영상을 다 보실 필요 없고 말씀드린 부분만 보면 헷갈리지 않고 해보실 수 있을거예요.

https://youtu.be/R2Ng8Vj2yhY?t=412

- reuse identifier 설정 (6:38 ~ 6:42)

- cell 클래스 생성하기(6:52 ~ 7:14)

    - 여기서 만든 클래스에 prepareForReuse 오버라이드 해서 사용합니다

- cell 클래스 지정하기 (7:49 ~ 8:03)

- cell 불러와 사용하기 (11:11 ~ 11:39)

seonjukim님의 프로필 이미지
seonjukim
질문자

야곰님 친절한 설명 감사합니다! 방법은 잘 이해했습니다.

prepareForReuse에 content와 관련 없는 속성들을 초기화하는 코드는 어떻게 작성해야 할까요?

아래처럼 작성하면 원하는 대로 동작하긴 하는데 textColor가 UIColor!로 정의되어 있던데 어떻게 nil값이 들어가도 에러 없이 동작하는지 궁금하고,

셀에 속성이 많아질 경우 이렇게 셀에 들어가는 각각의 이미지뷰, 텍스트뷰 등등의 뷰에 대해 하나하나 nil값을 넣어서 초기화해주어야 하는 것인지, 이럴 필요 없이 한 번에 초기화할 수 있는 메소드가 있는지 궁금합니다!

override func prepareForReuse() {

    super.prepareForReuse()

        

    self.textLabel?.textColor = nil

}

yagom님의 프로필 이미지
yagom
지식공유자

맞습니다. 잘 하셨어요!

첫 번째 궁금증은 문서에서 찾아보실 수 있을거예요.

https://developer.apple.com/documentation/uikit/uilabel/1620531-textcolor

 

또, 셀에 여러 요소가 있으면 각각의 요소별로 초기화 해줘야합니다 :)

 

seonjukim님의 프로필 이미지
seonjukim
질문자

아 문서에 정리가 잘 되어있네요! 감사합니다 ☺️☺️