2012-12-29 3 views
3

저는 180도 회전했지만 셀은 -180도까지 회전했습니다. 결과는 테이블 뷰 맨 아래에서 데이터를로드하는 것입니다. 이것은 잘 작동합니다. 문제는 셀을 재정렬하려고 할 때 발생합니다. 셀을 드래그하려고하면 드래그 한 방향에 따라 테이블 뷰의 위쪽/아래쪽으로 즉시 이동하고 점프합니다.회전 된 순서 변경보기

가장 쉽게 볼 수있는 방법은 핵심 데이터가있는 마스터 상세 템플릿을 사용하여 새 프로젝트를 시작하는 것입니다. OIMasterViewConroller.m 파일 장소

CGAffineTransform transform = CGAffineTransformMakeRotation(-3.14159); 
self.tableView.transform = transform; 
의 viewDidLoad 방법에

,과에서 configureCell 방법에

CGAffineTransform transform = CGAffineTransformMakeRotation(-3.14159); 
cell.transform = transform; 

놓습니다. 마지막으로, YES를 반환하는 canMoveRowAtIndexPath을 변경하고 빈

-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { 

} 

실행을 프로젝트를 구현하고 + 버튼으로있는 tableview에 몇 가지 항목을 추가 할 수 있습니다. 그런 다음 편집 버튼을 클릭하고 순서를 변경하십시오.

테이블에 거꾸로 있음에도 불구하고 셀의 회전을 제거하면이 이상한 동작이 멈추기 때문에 셀에 문제가 있다고 생각합니다.

나는 셀 안의 텍스트를 회전시키는 것에 대해 생각했지만, 삭제 단추는 거꾸로 된 것뿐 아니라 틀린 면도 있습니다.

답변

4

그래서 테이블 뷰와 테이블 뷰에서 사용 된 셀의 서브 클래 싱이 끝났습니다. 여기에 내가 무슨 짓을했는지의 일부는 다음의 tableview 서브 클래스에서

은 내가 layoutsubviews 과부하 :

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    for (UIView *subview in self.subviews) { 
     if ([NSStringFromClass([subview class]) isEqualToString:@"UIShadowView"]) { 
      subview.hidden = YES; 
     } 
    } 
} 

이는 그림자를 제거합니다. 사용자가 정렬하지 않으면 테이블 뷰 셀의 맨 위에 그림자가 표시됩니다. tableviewcell 서브 클래스의 경우

나는 이런 식의 layoutSubviews을 변경 :

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

     for (UIView *subview in self.subviews) {   
     if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) { 
      CGRect newFrame = subview.frame; 
      newFrame.origin.x = 0; 
      subview.frame = newFrame; 
      subview.transform = CGAffineTransformMakeRotation(-M_PI); 
     } 
     else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) { 
      CGRect newFrame = subview.frame; 
      newFrame.origin.x = 320-newFrame.size.width; 
      subview.frame = newFrame; 
      subview.transform = CGAffineTransformMakeRotation(-M_PI); 
     } 
     else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellReorderControl"]) { 
      CGRect newFrame = subview.frame; 
      newFrame.origin.x = 0; 
      subview.frame = newFrame; 
     }else if([NSStringFromClass([subview class]) isEqualToString:@"UIButton"]) { 
      CGRect newFrame = subview.frame; 
      newFrame.origin.x = 0; 
      subview.frame = newFrame; 
      subview.transform = CGAffineTransformMakeRotation(-M_PI); 
     }else{ 
      subview.transform = CGAffineTransformMakeRotation(-M_PI); 
     } 
    } 
} 

이 회전하고 모두 삭제 버튼/지표 요법으로 이동합니다. 주목할 중요한 점은 UITableViewCellReorderControll을 회전시키지 않는다는 것입니다. 이 하위 뷰를 회전하면 재정렬이 엉망이됩니다.

+0

고마워요! 약간의 설명 : 정확도를 높이려면 -3.14159 대신 M_PI 상수를 사용하십시오. – Christoph

+0

전화하세요. 코드를 업데이트했습니다. – Jbryson