2013-01-14 9 views
2

내 앱에서 사용자 정의 UITableViewCell을 사용하고 있으며 "삭제할 스 와이프"버튼의 프레임을 조정하려고합니다. 그것은 대단한 새로운 위치에 표시UITableView "스 와이프하여 삭제"버튼 프레임 문제

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) return; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:0.0f]; 
    for (UIView *subview in self.subviews) { 
     if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) { 
      CGRect newFrame = subview.frame; 
      newFrame.origin.x = newFrame.origin.x - 25; 
      subview.frame = newFrame; 
     } else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) { 
      CGRect newFrame = subview.frame; 
      newFrame.origin.x = newFrame.origin.x - 25; 
      subview.frame = newFrame; 
     } 
    } 
} 

:

이 내가 뭘하는지입니다. 그러나 버튼을 클릭하여 사라지게하면 버튼이 갑자기 왼쪽으로 약 10 포인트 이동 한 다음 제거됩니다.

왜 이런 일이 발생하며 어떻게 해결할 수 있습니까?

+0

이 코드는 사용자 정의 TableViewCell 클래스에 있습니까? – jhilgert00

+0

예 내 사용자 지정 UITableViewCell 클래스입니다. –

답변

4

사용중인 애니메이션 코드에 익숙하지 않지만, layoutSubviews 대신 willTransitionToState (및 필요한 경우 didTransitionToState)을 사용하여 tableViewCells 편집 중에 애니메이션을 처리하려고합니다.

둘 모두 iOS 3.0부터 사용할 수 있습니다.

이 코드를 UITableViewCell 하위 클래스에 넣으십시오. 하나의 UITableViewCellStateMask에서 모든 트랜지션을 처리 할 것이고 각 상태로의 전환에 필요한 애니메이션을 구현할 수 있습니다. 내가 추가 한 NSLog에 따라 적절한 위치에 필요한 애니메이션을 구현하기 만하면됩니다. (애니메이션 코드를 다시 익숙하지 않은,하지만 난 그것을 테스트했고,이 코드를 사용하여 결과보고)

- (void)willTransitionToState:(UITableViewCellStateMask)state { 

    [super willTransitionToState:state]; 

    if (state == UITableViewCellStateDefaultMask) { 

     NSLog(@"Default"); 
     // When the cell returns to normal (not editing) 
     // Do something... 

    } else if ((state & UITableViewCellStateShowingEditControlMask) && (state & UITableViewCellStateShowingDeleteConfirmationMask)) { 

     NSLog(@"Edit Control + Delete Button"); 
     // When the cell goes from Showing-the-Edit-Control (-) to Showing-the-Edit-Control (-) AND the Delete Button [Delete] 
     // !!! It's important to have this BEFORE just showing the Edit Control because the edit control applies to both cases.!!! 
     // Do something... 

    } else if (state & UITableViewCellStateShowingEditControlMask) { 

     NSLog(@"Edit Control Only"); 
     // When the cell goes into edit mode and Shows-the-Edit-Control (-) 
     // Do something... 

    } else if (state == UITableViewCellStateShowingDeleteConfirmationMask) { 

     NSLog(@"Swipe to Delete [Delete] button only"); 
     // When the user swipes a row to delete without using the edit button. 
     // Do something... 
    } 
} 

그리고 당신은 이러한 이벤트 중 하나 후에 일어날 일을해야하는 경우, 그냥 같은 코드를 구현하지만,의를 didTransitionToState. 동일한 UITableViewCellStateMask이 적용됩니다.

+0

감사합니다.이 답변과 함께 여기에서 답변 : http://stackoverflow.com/questions/2104403/iphone-uitableview-delete-button 내 문제가 해결되었습니다! –

+0

마지막으로 UITableViewCell의 메소드 willTransitionToState를 사용하여 사용자가 스 와이프 이벤트를 감지 할 수 있습니다. – tounaobun