2014-09-01 5 views
1

나는 이것을 많이 검색하고 내가 찾고있는 것을 발견하지 못했습니다.iOS 동적 셀 내용

UITableViewCell에는 동적 콘텐츠가 포함되어 있어야합니다. 예를 들어, 하나의 셀은 장소 이름, 주소, 전화 번호, 이미지 등을 가질 수 있습니다. 다른 셀은 이러한 속성 중 일부 또는 전부를 가질 수 있습니다.

enter image description here

는 내가 적절하게 기능 cellForRowAtIndexPath:heightForRowAtIndexPath: 반환 물건을 가져야한다는 것을 알고있다.

내가 직면하고있는 문제는 nib 파일로 설계된 셀을 가지고 있으며 거기에서 레이아웃을로드 중입니다. 조건에 따라 각 셀의 높이를 계산할 수 있지만 (지루한 작업 임에도 불구하고) 한 가지가 빠져 있다면 그 셀에 물건을 배치해야합니다. 예를 들어 장소 이름이 누락 된 경우 setFrame:을 통해 모든 요소를 ​​위로 이동합니다.

내가 믿는 쉬운 방법이 있어야합니까?

+0

** 스토리 보드 **를 사용하고 있습니다. 그렇다면 아무런 문제가 없습니다. 테이블에 대해 하나 이상의 셀이 있습니다. – Fattie

+0

안녕하세요 Joe, 예, 그 방법이 있습니다. 그러나 조합은 정말 많아 약 10 개의 셀 레이아웃을 설계하도록 이끌 것입니다. 원하지 않는 요소를 튕겨 낼 수있는 무언가가 없으며 셀이 레이아웃을 자동으로 다시 조정합니다. –

+0

하나의 테이블에 대해 10 개의 셀 레이아웃이 정상입니까? 나는 더 좋은 방법이있을 거라고 생각했습니다. –

답변

2

이러한 동적 인 경우 스토리 보드를 사용하여 성가 시게하지 않아도됩니다. 프로그래밍 방식으로이 작업을 수행하는 것은 매우 쉬워야합니다 ...

스토리 보드에이 코드를 작성해야하는 경우 5 개의 레이블 (예 : 5 개의 레이블)로 구성된 전체 셀을 생성 할 수 있습니다. 이제 테이블 뷰 데이터 소스에서 각 요소가 테이블 뷰의 단일 행을 나타내는 개체 배열이 있다고 가정합니다. 그렇다면 귀하의 경우에이 객체 각각은 비어 있지 않은 문자열 (실제로 표시 될 문자열)의 배열을 반환하는 메소드를 가질 수 있습니다.이 배열은 1에서 5 개의 문자열까지 역동적 인 수입니다.

이렇게하면 색인 경로에서 행의 높이를 요청하는 방법으로이 배열을 요청할 것이므로이 수를 사용하여 행의 높이를 반환 할 수 있습니다 (예 : numOfStrings*40.0f). 셀을 요청하는 메소드에서 높이를 계산하는 데 사용하는 동일한 배열로 해당 레이블을 채울 수 있습니다.

비 스토리 보드 접근 방식으로 UITableViewCell을 재정의하고 문자열 수의 셀 높이를 반환하는 정적 메서드를 생성 한 다음 문자열 배열로 이니셜 라이저를 생성합니다. 그러면 문자열을 생성하는 배열을 반복해야합니다. 텍스트를 설정합니다.

+0

네, 처음에는 이것에 대해 생각했습니다. 빈 문자열을 레이블로 설정하면 해당 위치를 비워 둘 수 있습니다. 가능한 해결 방법은 빈 레이블의 높이를 0으로 설정하는 것입니다. 그러나이 방법을 사용해도 다른 요소는 위로 이동 (또는 재배치)해야합니다. 복잡한 셀의 경우 문제가 될 수 있습니다. 나는 아마도 다른 요소들이 자동으로 위로 움직일 수있는보다 우아한 접근법을 찾고 있는데, 그것은 아마도 많은 도움이 될 것이다. –

+0

두 방법 모두에서 레이블이 자동으로 "위로 이동"될 것이라고 설명했습니다. 스토리 보드에서 정적 셀을 넣으면 올바른 셀을 채워야합니다. 첫 번째와 네 번째 줄만 있으면 1, 2 번째 줄을 채우고 첫 번째와 네 번째가 아닙니다. –

+0

좋아요, 다시 읽었을 때 스토리 보드 접근법이 더 잘 이해됩니다. 모든 것이 UILabel 인 경우 작동하지만 모든 것이 UILabel이 아닙니다. 다이어그램의 네 번째 항목 (예 : 통화 버튼)과 같은 버튼도 있습니다. –