2016-11-05 2 views
0

레이블에 번호가있는 사용자 지정 셀을 만들고 싶습니다. 필요한 고정 레이블 수를 알고있는 경우 사용자 지정 셀을 쉽게 만들 수 있습니다. 그러나 특정 셀에 대해 얼마나 많은 라벨이 필요한지 알지 못하면 어떻게 될까요? 필요한 레이블 수를 알려주는 API 측면에서 가치를 얻습니다. 라벨이 3 개 이상인 경우 라벨을 더 표시하도록 셀을 확장하는 '더보기'버튼이 표시됩니다.UITableView 사용자 정의 셀에서 일관성없는 레이블 수를 만드는 방법은 무엇입니까?

지금 당장 사용자 지정 셀에 3 개의 레이블을 만들어이를 구현할 수 있습니다. 그리고 cellForRowAtIndexPath에서 마지막 두 레이블을 숨기고 API에서 제공된 데이터에 따라 셀 프레임을 변경할 수 있습니다. 하지만 "더보기"버튼을 클릭 한 후에 더 많은 라벨을 표시하는 방법을 알아야합니다. 그렇다면이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 당신의 작은 도움을 주시면 감사하겠습니다.

참고 : 스토리 보드를 사용하지 않습니다. 프로그래밍 방식으로 모든 객체를 만듭니다.

답변

1

항상 UICollectionViewUITableView 행에 넣을 수 있습니다. UICollectionView의 각 셀은 UILabel입니다. API에서 수신 한 번호에 따라 UICollectionViewdataSource을 업데이트하십시오. "더보기"버튼을 표시하지 않으려는 경우 접근 방식입니다.

+1

정말로 가장 좋은 해결책이라고 생각하십니까? 나는 그것을 의심한다. 이 공통적 인 도전 과제는 쉬워야합니다. UICollectionView를 셀의 예측되지 않은 수의 UILabel에 사용하는 이유는 무엇입니까? –

+0

컬렉션 뷰는 자동으로 라벨 설정을 처리하며 레이아웃 자체는 언급하지 않습니다. ** 더보기 버튼을 보여 주려면 **, 당신은 항상'UICollectionView'를위한'dataSource'에서 3을 뺀 다음 ** 버튼 액션에서'UICollectionView'를 만듭니다. 그러나 이것은 개인적으로 버튼을 피할 수 있도록 약간의 처리가 필요합니다. – Rikh

0

프로그래밍 방식으로 셀을 설정하십시오. 그 당시에는 셀이 필요하고, 이미 데이터를 가지고 있으며, 데이터를 생성하는 방법을 알고있을 것입니다.

선행 기술을 알지 못하는 경우에도 셀이 표시되는 동안 (즉, 비동기 로딩의 경우) 셀 내용을 변경할 수 있습니다.

데이터에 따라 형식이 지정된 텍스트가있는 텍스트보기와 같은 것을 사용하면 트릭 또는 여러 줄 레이블을 사용할 수 있습니다. 레이블의 수가 상한값보다 낮 으면 처음부터 여러 개의 레이블이 없어져 보이지 않게 설정하거나 필요하지 않은 경우 레이블을 제거 할 수 있습니다. 또 다른 옵션은 레이블의 수에 따라 미리 구성된 다른 셀을 사용하는 것입니다.

인터페이스 빌더에서만이 작업을 수행하는 것은 다소 지루한 작업입니다.

이 시나리오에서는 셀을 재사용 할 때주의해야합니다. - 다른 구성에 다른 식별자를 사용하거나, 내부를 매우 신중하게 업데이트하거나, 전혀 재사용하지 마십시오.

0

두 개 또는 세 개의 레이블이있는 경우 세 번째 레이블을 셀의 맨 아래에 놓는 간단한 솔루션 솔루션이 있습니다.이 레이블이 있어야한다면 높이 제한을 설정해야합니다. 존재하지 않아야합니다. 높이를 0으로 설정하십시오.

그렇지 않으면 내가하고 싶은 것을 정말로 이해한다면, 셀에 테이블 뷰를 갖는 것보다 더 간단한 솔루션을 생각할 수 없습니다. 많은 레이블을 표시하는 테이블 뷰 원하는대로 셀 높이가 포함 된 표보기 셀의 높이의 2 배가되어야합니다. 그리고 버튼은 셀의 높이를 전체 테이블 뷰 내장 깊이만큼 높게 변경합니다.

희망 하시겠습니까?

0

동적으로 tableView 셀 높이를 설정할 수 있습니다. 앞에서 말했듯이, API에서 tableView 셀에 몇 개의 레이블이 있는지에 대한 정보를 얻고 있습니다. 이 모든 데이터를 배열에 넣을 수 있습니다. 아래 코드를 확인하십시오.

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return ([[array objectAtIndex:indexPath.row] count] * yourLabelHeight); 
} 
+0

그건 내 문제가 아니야. 내 문제는 내가 cellForRowAtIndexPath 메서드에서 셀에 이러한 예측할 수없는 수의 레이블을 만드는 것입니다. 그래서 이들은 셀에 추가 할 로컬 레이블입니다. 그러나 스크롤 할 때마다이 모든 레이블이 서로 겹칩니다. 나는이 라벨들을 추적 할 수 없다. –

관련 문제