I'm not familiar with the animation code you're using, but I would try using willTransitionToState
(and, if needed, didTransitionToState
) instead of layoutSubviews
to handle animation during editing tableViewCells.
Both have been available since iOS 3.0.
Place this code in your subclass of UITableViewCell
. It will handle all of the transitions from one UITableViewCellStateMask
to another, and you can implement the animation you need for the transition to each state. Just implement the animations you require in the proper place according to the NSLogs I added. (again, not familiar with your animation code, but I did test it and saw results using this code)
- (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...
}
}
And if you need something to happen after one of these events, just implement the same code, but in didTransitionToState
. The same UITableViewCellStateMask
s apply.