2010-04-29 6 views
1

테이블의 다른 내용을 만드는 사전을 변경하지 않고 사용자 지정 콘텐츠에 대한 추가 셀을 tableView의 마지막 셀로 추가하려고합니다. 나는 그것을 추가 할 장소가 numberOfRowsInSection에 하나를 추가하는 것보다 cellForRowAtIndexPath에 있다고 생각한다. UITable 끝에 빈 셀을 추가하십시오.

내가 cellForRowAtIndexPath에서 다음 테이블에 대한 데이터를 생성하는 사전에서 cellCount를 얻을, 내가 가진이

물론
if (indexPath.row == cellCount) { 
     ... stuff goes here 
      return cell; 
         } 

를 호출되지 없구요. if (indexPath.row == cellCount -1)을 입력하면 마지막 셀을 내용으로 덮어 씁니다.

사전을 채우는 xml에 빈 항목을 추가하면이 문제가 발생할 수 있습니다.하지만 그것은 추한 것입니다.

예제 코드는 깔끔합니다.

답변

1

여기서 문제는 테이블 뷰가 데이터 모델의 내용을 쉽고 정확하게 표시하고 사용자가 원하지 않는다고 결정한 것입니다. 당신은 API와 싸우고 있습니다.

이렇게하려면 입력 행을 표시 할 때 행 수에 하나를 추가하도록 numberOfRowsInSection에 체크를 넣는 것이 좋습니다. 그런 다음 cellForRowAtIndexPath:에서 테이블 뷰가 입력 행을 요청하고 적절한 유형의 셀을 반환하는지 확인해야합니다.

UI 디자인 포인트에서이 설정이 가장 적합한 지 고려해 볼 수 있습니다. 이것은 표준 설정이 아닙니다. 사용자는 테이블의 마지막 행만 편집 할 수 있다는 것을 알고 있습니까? 그들은 다른 행을 편집 할 수 없다는 것을 알고 있습니까? UI의 모든 내용이이 모든 작동 방식을 알려줍니까? 데이터를 추가 할 때마다 사용자가 테이블 끝으로 스크롤해야합니까? 이 테이블은 얼마나 오래 성장할 수 있습니까? 테이블의 마지막 행에 대한 키보드 표시는 테이블 스크롤 방법에 어떤 영향을 줍니까?

필자는 텍스트 필드를 표시하기 위해 바닥 글보기를 사용하여 나머지 테이블과 시각적으로 구별되는 것이 더 좋은 디자인이라고 생각합니다. 프로그래밍 방식으로도 더 간단합니다. 테이블이 셀을 요청할 때마다 마지막 행을 요청했는지 확인할 필요가 없습니다.

편집 :

그것에 대해 생각에서, 아마도 단면 표는 간단하다. 그 자체의 섹션 (헤더의 유무에 관계없이)에 특수 행을 넣으면됩니다. 그러면 해당 섹션의 행 수가 항상 사전의 카운트이기 때문에 사전에서 나오는 행을 쉽게 처리 할 수 ​​있습니다. 마찬가지로 인덱스 경로의 섹션 속성을 검사하여 어떤 셀을 반환할지 알 수 있습니다.

+0

감사합니다. TechZen. 해당 셀은 편집 할 대상이 아닙니다. 위에 제시된 데이터의 요약을 제공 할 것이므로 사전에없는 셀에 추가 할 수 있습니다. –

+0

다른 아이디어는 위의 편집을 참조하십시오. – TechZen

+0

훌륭한 제안입니다. 데이터에서 3 개의 표를 그리지 않으면이 방법이 효과적 일 것입니다. 앱 테이블은 다음과 같이 구성됩니다. 국가 -> 주 -> 주요 도시 주요 도시 테이블에서만 2 번째 섹션이 필요하며 테이블을 그려서 섹션을 추가 할 수는 없습니다. 두 개의 섹션을 만들면 처음 두 테이블은 첫 번째 섹션의 데이터를 복제합니다. –

1

먼저 +1을 반환하려면 numberOfRowsInSection을 수정해야합니다. 그런 다음 cellForRowAtIndexPath에서 여분의 빈 셀을 추가해야합니다.

+0

를 불행하게도, 나는 '경계를 넘어'와 충돌 사전 내의 노드의 수보다 큰 값을 반환 할 때 오류. 그 노드에서 여러 개의 테이블이 작성되기 때문입니다. 표 1은 일부 데이터 (10 개 셀)를, 표 2는 다른 데이터 (8 개 셀, 가변) 및 테이블 3 개 이상의 데이터 (10 개 이상의 셀)를 보여줍니다. 각 테이블의 셀 수는 사전에있는 숫자가 다른 키로 결정됩니다. –

1

cellForRowAtIndexPathnumberOfRowsInSection의 추가 셀을 제공해야합니다.

cellCount은 다음 배열에있는 세포의 실제 수 있음을 가정한다 : (a) cellForRowAtIndexPath 복귀에 추가 정의 셀 indexPath.row == cellCount이, 그리고 (b) numberOfRowsInSection 당신은 return cellCount+1해야합니다.하나의 섹션을 가정

, 예는 다음과 같이 갈 것이다 :

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [journalArray count] + 1; // add 1 for summary 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row < [journalArray count]) { 
     return [journalArray objectAtIndex:indexPath.row]; 
    } else { 
     return summaryCell; 
    } 
} 
관련 문제