即使显示抓取器,也无法在UITableView中移动行

Uma*_*air 13 cocoa-touch objective-c uitableview

我有一个奇怪的问题,我无法弄清楚我错过了什么.我有一个可编辑的UITableView(即当我的UI加载时,我发送我的表setEditing:YES animated:YES消息).表中的最后一行是"添加新"行.除了表格中最后一行之外的所有行都可以移动.没有行可以删除.

行显示正确,并且抓取器显示在除最后一行(按预期)之外的所有行的右侧.问题是我无法移动行.当我点击抓取器移动行时,它有点摇晃,但我无法向上或向下拖动它.这是相关的代码片段:

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleNone;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {   
    if (indexPath.row == [self.itemArray count] ) {
        return NO;
    }
    return YES;
}

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == [self.itemArray count]) {
        return NO;
    }
    return YES;
}

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    Item *item = [self.itemArray objectAtIndex:fromIndexPath.row];
    [self.itemArray removeObjectAtIndex:fromIndexPath.row];
    [self.itemArray insertObject:item atIndex:toIndexPath.row];
}

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
    if ([proposedDestinationIndexPath row] < [self.itemArray count]) {
        return proposedDestinationIndexPath;
    }
    NSIndexPath *betterIndexPath = [NSIndexPath indexPathForRow:[self.itemArray count]-1 inSection:0];
    return betterIndexPath;
}
Run Code Online (Sandbox Code Playgroud)

在尝试调试时,似乎tableView:moveRowAtIndexPath:几乎立即被调用,即使我正在抓住抓取器(即我还没有举起手指).而且,我的tableView:targetIndexPathForMoveFromRowAtIndexPath:proposedDestinationIndexPath:根本没有被调用.

关于我做错了什么的任何想法?关于我应该尝试解决这个问题的任何建议?

Raf*_*bre 28

我遇到了同样的问题,@ wilsontgh和@Andy的回答让我朝着正确的方向前进.但是,我无法从superview中删除所需的PanRecognizer,也无法在某些视图中禁用它.对我有用的是在主视图识别器上设置它,这避免了取消处理到其他视图/识别器的触摸.

panRecognizer.cancelsTouchesInView = NO;
Run Code Online (Sandbox Code Playgroud)

  • 为了修复ViewDeck,我能够在我的`IIViewDeckController中将`panningCancelsTouchesInView`设置为false. (3认同)

wil*_*tgh 23

我也有这个问题.检查你是否有一个UIGestureRecognizer(对我来说它是一个UIPanGestureRecognizer)附加到UITableView的超级视图.我删除它并重新排序工作.