Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
관리 메뉴

leeyang의 개발 성장기

[Swift] TableViewCell identifier에 관하여 본문

Swift

[Swift] TableViewCell identifier에 관하여

leeyang 2019. 9. 9. 20:35

안녕하세요 리양입니다 :)

최근에 기존에 했던 프로젝트를 리팩토링하면서 관심이 생긴 TableVIew의 Cell identifier에 얘기하고 싶어졌습니다.

TablewView는 요청할 때 마다 Cell을 생성하지 않고, 재사용 큐에 대기하고 있는 Cell이 있다면 재사용하고, 없으면 새로운 Cell을 생성합니다.

그 후 사용자가 스크롤 하여 더이상 화면에 보이지 않은 Cell은 재사용 큐에 들어갑니다.

*_UITableViewDataSource *_의 메소드인

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

에서

 tableView.dequeueReusableCell(withIdentifier: "leeyang", for: indexPath)

을 하여 큐에서 꺼내 Cell을 사용하곤 합니다.

Cell을 재사용하기 위해서는 Cell을 미리 TableView에 register를 해야합니다.

register를 할 때 식별자인 identifier의 값에 따라 해당 Cell을 사용할 수 있죠.

꺼내는 건 공통이지만 등록은 Cell을 만드는 방식에 조금 다릅니다.

Cell을 만드는 방법은 총 3가지가 존재합니다

  1. code 2. xib 3. storyboard

storyboard는 자동으로 셀을 등록하기 때문에 별도의 등록을 하지 않아도 됩니다.

xib / code에 따라 오버로딩 된 두 메소드 중 하나를 택하여 register를 해야합니다.


등록과 사용을 알았으니 이제 아까 말한 식별자로 등록 후 꺼내야 하는데 저는 여기서 의문이 생겼습니다.

'한 tablewView에 2개 이상의 Cell들을 등록해야한다면 각 Cell들의 identifier를 상수로 가지고 있어야 할 필요가 있을까?' 였습니다.

이미 cell의 이름이 유니크한데, 그 이름으로 idenfitier를 타이핑 없이 알아서 자동으로 맵핑이 가능하다면, 코드의 귀찮음이 줄어 들지 않을 까 했습니다.

그래서 cell file name을 자동으로 등록하자란 아이디어가 떠올랐으며 사용해보았습니다.


Code

nib이름과 idenfitier를 computed 변수로 자기 자신을 string으로 반환하게 합니다.

만들어 놓은 Cell에 해당 Protocal을 상속합니다.

그러면 MainStoreListTableViewCell.nibname을 할 시 MainStoreListTableViewCell 로 값이 나옵니다.

extension 으로 register를 간단하게 랩핑합니다.

저는 cell을 재사용하기위해 xib를 사용하기에 nib부분만 변경해보았습니다. 제네릭으로 어떤 타입이든 상관없이 nib을 생성 후 레지하도록 합니다.

dequeue부분도 별도 identifier를 하지 않게 랩핑합니다.

tableView.register(MainStoreListTableViewCell.self)

tableView.dequeueReusableCell(forIndexPath: indexPath) as MainStoreListTableViewCell

로 별도의 식별자 상수 없이 클래스 네임으로 구분할 수 있게 되었습니다.

저는 식별자를 여기저기 써놓아서 통일성이 어긋나는 경우를 지양하고자 생각했습니다.

더 좋은 방법이 있으면 코멘트부탁드립니다 :)

'Swift' 카테고리의 다른 글

[Swift] ExpandableCell 만들기  (0) 2019.09.15
[Swift] 열거형 - enum 기본편  (0) 2019.09.03
[Swift] for문 탐색을 거꾸로하기  (0) 2019.09.01
Comments