Ios UITableView“;滑动以删除”;按钮框问题
我正在我的应用程序中使用自定义的Ios UITableView“;滑动以删除”;按钮框问题,ios,uitableview,frame,layoutsubviews,Ios,Uitableview,Frame,Layoutsubviews,我正在我的应用程序中使用自定义的UITableViewCell,我正在尝试调整“滑动以删除”按钮的框架 这就是我正在做的: - (void)layoutSubviews { [super layoutSubviews]; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) return; [UIView beginAnimations:nil context:NULL]; [UIView setA
UITableViewCell
,我正在尝试调整“滑动以删除”按钮的框架
这就是我正在做的:
- (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点,然后被移除
为什么会发生这种情况,我如何修复它?我不熟悉您正在使用的动画代码,但我会尝试使用(如果需要的话)而不是
layoutSubviews
在编辑tableViewCells时处理动画
这两个版本都是从iOS 3.0开始提供的
将此代码放在UITableViewCell
的子类中。它将处理从一个状态到另一个状态的所有转换,并且您可以实现转换到每个状态所需的动画。只需根据我添加的NSLogs在适当的位置实现所需的动画。(同样,我不熟悉您的动画代码,但我确实测试了它,并看到了使用此代码的结果)
如果您需要在其中一个事件之后发生一些事情,只需实现相同的代码,但是在
didtransitionstate
中。同样的UITableViewCellStateMask
s也适用。我不熟悉您正在使用的动画代码,但我会尝试使用(如果需要的话)而不是layoutSubviews
在编辑tableViewCells时处理动画
这两个版本都是从iOS 3.0开始提供的
将此代码放在UITableViewCell
的子类中。它将处理从一个状态到另一个状态的所有转换,并且您可以实现转换到每个状态所需的动画。只需根据我添加的NSLogs在适当的位置实现所需的动画。(同样,我不熟悉您的动画代码,但我确实测试了它,并看到了使用此代码的结果)
如果您需要在其中一个事件之后发生一些事情,只需实现相同的代码,但是在
didtransitionstate
中。同样的UITableViewCellStateMask
s适用。此代码是否在您的自定义TableViewCell类中?是的,它是我的自定义UITableViewCell类。此代码是否在您的自定义TableViewCell类中?是的,它是我的自定义UITableViewCell类。感谢此答案,并结合此处的答案:修复了我的问题!最后,我可以使用UITableViewCell的方法WillTransitionOnState检测用户刷卡事件:感谢这个答案,并结合这里的答案:修复了我的问题!最后,我可以使用UITableViewCell的方法WillTransitionOnState检测用户刷卡事件:
- (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...
}
}