2011-08-23 6 views
0

사용할 수있는 콘텐츠에 따라 다른 UITableViewCell을 표시하려고합니다. 어떻게해야합니까?사용 가능한 텍스트 또는 이미지 콘텐츠에 따라 다른 UITableViewCell 선택

예 :

내가 누구 contentViewUILabel, UITextField 및 파단으로 UIImageView이있는 사용자 정의 UITableViewCell이 있다고 할 수 있습니다. UILabel은 셀 상단에 UITextField 옆에있는 UIImageView 위에 있습니다. 이보기의 내용에 따라 사용 가능한 부분 만 표시하고 다른보기는 확대합니다. e.G : UILabel 컨텍스트가 누락 된 경우 셀의 맨 위에 빈 공간이 있기를 원하지 않습니다. 이미지가 없으면 텍스트 필드는 셀의 맨 왼쪽에서 시작해야합니다.

많은 해결 정확히 같은 문제를 가지고 거기에 신문/TV 애플리케이션 ...

접근이 있어야한다 : 어디 어떻게 든 같은 사용자 정의 셀을 사용

(I) 파단

(II) 어떤 내용에 따라 다른 사용자 정의 UITableViewCell 년대를 호출 재 배열하여 볼 수 있습니다

두 가지 방법 모두에서이 문제를 해결할 경로를 찾는 데 문제가 있습니다. 내 UITableView 콘텐츠 크기는 동적이며 몇 줄 또는 여러 개를 가질 수 있습니다.

누락 된 다른 방법이 있습니까? 아니면 어떤 방법이 모범 사례입니까?

+0

나는 Anomie가 준 대답으로 인해 * (i) * 접근 방법을 선택하기로 결정했습니다. 그것은 위대한 작품! 그렇지 않으면 5 개의 다른 셀을 만들어야하기 때문에이 방법을 선택했습니다. 이제는 사용할 수있는 콘텐츠에 따라 레이아웃을 변경하는 셀 하나만 있습니다. –

답변

1

두 방법 모두 접근 할 수 있지만, 아마도 (i)을 선호합니다.

(i)의 경우 재사용이 쉽습니다. 재사용 할 때 이전 데이터를 지우고, UITableViewCell의 layoutSubviews 메소드가 데이터를 사용할 수있는 데이터와 일치하도록 서브 뷰를 적절하게 배치하고 데이터를 변경할 때 setNeedsLayout으로 호출해야합니다. 이점은 나머지 코드는 사용할 수있는 데이터가 무엇인지 신경 쓸 필요가 없으며 셀이 갑자기 이미지가 추가되면 신경 쓰지 않아도된다는 것입니다 (셀이 셀 높이 변경 등). 단점은 셀의 구현이 더 복잡하고 레이아웃을 IB에서 완전히 정의 할 수 없다는 점입니다. 들어

(II), 서로 다른 사용자있는 UITableViewCell 타입 reuseIdentifier 자체 있어야하고 가능 데이터에 해당하는 식별자를 사용 dequeueReusableCellWithIdentifier:.이점은 개별 셀 유형이 더 간단하고 (아마도 IB로 전체적으로 수행 될 수 있음) 단점은 사용 가능한 데이터의 가능한 조합 각각에 대해 여러 가지를 가져야한다는 것입니다. 또한 유형을 변경해야하는 경우 UITableView에 셀을 다시로드해야합니다 (예 : reloadRowsAtIndexPaths:withRowAnimation: 사용).

+0

위대한 답변 Thx! 셀 높이는 전체 텍스트를 표시하는 데 필요한 'UILabel'및 'UITextField' 내용 높이에 따라 달라집니다. 이 경우에도 * (i) *에 가겠습니까? –

+0

@braintt : 셀 높이 문제는 UITableViewCell 개체를 만드는 데 사용하는 메서드와 관련이 없습니다. – Anomie

2

(ii) 생각은 내 마음에가는 길입니다. 당신이 말한대로 UITableViewCell (.m, .h 및 .xib)을 정의하는 것은 인터페이스 작성기에서 CellIdentifier을 정의하는 것을 잊지 않고 대리인 tableView:cellForRowAtIndexPath:이 호출 될 때 적절한 UITableViewCell 템플릿 dequeueReusableCellWithIdentifier:을 선택합니다.

관련 문제