我正在使用 SWRevealViewController 作为侧边菜单。加载的UIViewController包含一个UITableView。表视图已启用幻灯片删除。但是,编辑功能始终不起作用。即, tableView:commitEditingStyle:不会被触发。虽然经过几次尝试后才会发生。我相信手势识别器存在冲突。已经有一天了。有人可以帮帮我吗?
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
NSUInteger count = [self.shopListArray count];
if (row < count) {
[[[self.shopListArray objectAtIndex:indexPath.section] objectForKey:IFRecipe_ingredient] removeObjectAtIndex:row];
}
[self.shopListTableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
手势发生冲突时该怎么办?
答案 0 :(得分:0)
在代码中设置UITableViewCellEditingStyle
:
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete;
}
和SWRevealViewController中的平移手势识别器问题,在superview中包含平移手势识别器,我们在视图中获取tableview swibe识别器问题,在SWRevealViewController中删除平移手势并检查。
答案 1 :(得分:0)
为了启用表格视图的编辑模式,您可以在UITableView上调用edit方法,
在viewdidload
或viewwillappear
// try this
[self.tableView setEditing:YES animated:YES];
然后你可以轻松地做到这一点。
答案 2 :(得分:0)
试试这个,
首先在您的加载方法上或在需要时将tableview编辑模式设为YES。
[self.tableView setEditing:YES animated:YES];
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleDelete;
}
- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
答案 3 :(得分:0)
找到了这个https://stackoverflow.com/a/25987204/4376612帖子的解决方案。解决了我的问题。必须使用以下代码,
- (BOOL)revealControllerPanGestureShouldBegin:(SWRevealViewController *)revealController
{
float velocity = [revealController.panGestureRecognizer velocityInView:self.view].x;
if (velocity < 0 && self.revealViewController.frontViewPosition == FrontViewPositionLeft)
return NO;
else
return YES;
}