我的视图中有UITableView
,我想应用特定部分的滑动删除模式行。我实施的内容如下:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@">> canEditRowAtIndexPath");
if (indexPath.section == CanDeletedSection) {
return YES;
}else{
return NO;
}
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@">> editingStyleForRowAtIndexPath");
if (indexPath.section == CanDeletedSection) {
return UITableViewCellEditingStyleDelete;
}
return UITableViewCellEditingStyleNone;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@">> commitEditingStyle");
if (editingStyle == UITableViewCellEditingStyleDelete) {
// dosomething
}
}
但是当我向表格行滑动时,有时会出现Delete
按钮,有时则不会。
顺便说一句,我的单元格是自定义的,并且继承自UITableViewCell
。
我已将NSLog
添加到上述方法中。当Delete
按钮没有出现时,我得到的日志是这样的:
>> editingStyleForRowAtIndexPath
>> canEditRowAtIndexPath
出现Delete
按钮时,日志如下:
>> editingStyleForRowAtIndexPath
>> canEditRowAtIndexPath
>> editingStyleForRowAtIndexPath
>> canEditRowAtIndexPath
>> canEditRowAtIndexPath
>> editingStyleForRowAtIndexPath
我做了一个使用自定义单元格的演示,它运行正常。所以问题是由包含表视图的视图控制器引起的。视图控制器继承自另一个视图控制器,在该视图控制器中,有一个用于隐藏键盘的轻击手势。但是当我从视图控制器中删除它们时,结果是一样的。
答案 0 :(得分:7)
请检查视图或超级视图是否有任何其他手势。如果是这样,请确保在设置手势委托之后实现UIGestureRecognizerDelegate
的以下方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
答案 1 :(得分:0)
有时,特别是在模拟器中,很难正确执行滑动。您会发现它很可能是物理,而不是编码问题。
此外,您可能想要检查自定义单元格是否包含捕获滑动的元素,并且不会将其传递给单元格。
答案 2 :(得分:0)
我也面临同样的问题......
但最后我得到了解决方案: -
例如: -
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
如果您正在使用" commitcommiteditingstyle"您必须禁用该特定视图中的任何其他手势。 希望这会对你有所帮助...... :)
答案 3 :(得分:0)
视图层次结构中其他位置的手势识别器可以拦截并阻止滑动操作。
我在视图控制器中使用此类别解决了它:
@interface UIView (CellSwipeAdditions)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
@end
@implementation UIView (CellSwipeAdditions)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
@end
感谢bademi带领我找到这个解决方案!