UITableView滑动以删除在iOS8上无法正常工作

时间:2014-12-21 22:56:47

标签: objective-c iphone uitableview ios8 swipe

我有一个视图控制器,在uiview中有一个uitableview。委托和数据源正确嵌入,一切正常。

我正在使用commitEditingStyle和canEditRowAtIndexPathMethods委托方法来滑动以删除功能。

方法的用法如下。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

 if (editingStyle == UITableViewCellEditingStyleDelete) {

    NSDictionary *dataElement = [cartArray objectAtIndex:indexPath.row];

    NSString *productId = [dataElement objectForKey:@"id"];
    NSString *productSizeId = [dataElement objectForKey:@"beden_id"];

    [self deleteTableRowWithId:productId sizeId:productSizeId];

  }
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
    return YES;
}

滑动手势和委托方法在模拟器和设备上测试的iOS7上都没有任何问题,但是在iOS8上,滑动手势无法正常工作。

我在iOS8上使用iPhone 6对其进行了测试并激活了滑动我需要从边缘表单元格中滑动20次或更多次,有时甚至无法获得滑动删除按钮。

我检查并尝试了大多数堆栈溢出的解决方案。任何帮助或建议都将深表感谢。

故事板中的层次结构如下图所示。

Storyboard Table Cell

2 个答案:

答案 0 :(得分:2)

同样的问题,滑动只能在模拟器和设备上大约20%的时间工作。在我的情况下,它是由ECSlidingViewController(一种流行的滑动菜单实现)引起的,它设置了一个水平平移手势来打开菜单。需要在控制器的viewDidAppear:中禁用此手势,以便滑动到删除才能正常工作:

#import "ECSlidingViewController.h"

- (void)viewDidAppear:(BOOL)animated {
     [super viewDidAppear:animated];

     // Disable sliding menu pan gesture so it doesn't conflict with table view swipe-to-delete
     self.slidingViewController.panGesture.enabled = NO;
}

如果您希望其他控制器能够使用它,请务必重新启用平移手势:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    // Re-enable sliding menu pan gesture so other controllers can use it
    self.slidingViewController.panGesture.enabled = YES;
}

有关此问题的详情,请参阅此拉取请求:https://github.com/ECSlidingViewController/ECSlidingViewController/pull/70

简而言之,无论您是否正在使用ECSlidingViewController,请确保没有其他平移手势设置与滑动到删除平移手势相冲突。

答案 1 :(得分:0)

有时,还有其他手势识别器,而不仅仅是panGesture。如果你想保留平移手势或其他识别器,并且仍然允许滑动删除,我在可见视图控制器中完成了以下类别:

 append_cast <- {}

  for(i in 1:3)
  {  
    i<-1
    startLearn2<-1+i*10
    EndLearn2<-EndLearn1+i*10

    y <- tsData[startLearn2:EndLearn2] 
    fit_new <- Arima(y, model=fit_Model )

    append_cast <- append(append_cast, c(ModelCast$mean,forecast(fit_new, h=10)$mean, after=i*10)) ## Only seems to append one forecast instead of 3
  }