2010-02-08 3 views
2

복잡한 콘텐츠가있는 UITableView가 있습니다. 사용자는 편집 버튼을 표준 방식으로 탭하면 셀을 편집 (재배치 및 삭제) 할 수 있습니다. 그러나 세포를 "편집"모드에서 다르게 보이기를 원합니다.사용자가 편집 버튼을 누르면 UITableView 레이아웃을 다시 수행 하시겠습니까?

질문 :

어떻게 행 높이 변경을 포함하여, 편집 모드에서 jQuery과 레이아웃을 변경하려면?

편집 버튼이 각각있는 UITableViewCell (UITVC)에 WillTransitionToState/DidTransitionToState 메시지를 보냅니다 :

지금까지이 내가 가진 것입니다. 나는 UITVC를 서브 클래 싱 (subclassed)하고 각 셀 내부에서 이들에 반응하여 필요에 따라 숨어서 제거하고 개편했다. 그러나 행 높이를 변경하는 것은 하나의 셀 범위를 벗어납니다.

사용자가 편집 할 때 UITableView로 보낸 메시지가없는 것 같습니다. - tableView : commitEditingStyle : forRowAtIndexPath : 특정 행을 편집 한 후 데이터 소스로 전송됩니다.

내부 heightForRowAtIndexPath, 나는 tableView.editing 속성을 사용하여 현재 모드를 조회하고, 적절한 높이를보고 할 수 있습니다. [tableView reloadData]를 호출하여 높이 재 계산을 포함하여 테이블 재 흐름을 트리거 할 수 있습니다. 하지만 언제 부를 수 있니?

본인은 "소유"테이블보기로 다시 WillTransitionToState 내에서 세포의 메시지를 보내고, 내가 그들을 얻을 때 reloadData를 호출 할 수 있습니다. 그러나 이것은 깨지기 쉬운 것처럼 들리며 더 좋은 방법이 있어야합니다.

답변

3

당신이 당신의 테이블 셀이 테이블이 편집 모드에 있는지 여부, 당신이있는 UITableViewController의 -setEditing:animated:을 무시할 수 있고 변화에 테이블 뷰의 (-reloadData를 통해) 다시로드를 트리거에 대한 응답으로 자신의 형식을 변경하기 원하는 경우 편집 상태. 당신의있는 UITableViewController의 -tableView:cellForRowAtIndexPath: 방법 내에서

, 당신은 테이블에 테이블 뷰에 editing 속성을 쿼리하여 편집 상태에 있는지 여부를 확인하고있는 테이블에 명시 따라 다른 세포 유형을 반환 할 수 있습니다.

+0

작품은 예상대로. 올바른 방법 서명이 - (void) setEditing : (BOOL) 애니메이션 편집 : (BOOL) 애니메이션을 사용했지만 - (UITableView *) tableView setEditing : (BOOL) 애니메이션 편집 : (BOOL)) animate, 물론 작동하지 않았다. 따라서 항상 문서에서 메소드 서명을 재확인하십시오. :) – Jaanus

+1

reloadData 죽은 좋은 편집 애니메이션을 죽이고 ... –

8

리듬이 맞습니다. reloadData를 사용하면 멋진 편집 애니메이션이 사라집니다.

이 문제는이 글에서 해결 : 는 Can you animate a height change on a UITableViewCell when selected?

대신 reloadData를 사용하는의 setEditing를 호출 한 후 다음을 수행하십시오 애니메이션.

[tableview setEditing:editing animated:YES]; 
[tableview beginUpdates]; 
[tableview endUpdates]; 
관련 문제