无法在UITableView中重新排序行

时间:2015-04-11 14:10:26

标签: ios objective-c uitableview

尝试重新排序UITableView中的行时遇到问题。 我已触发函数tableView:moveRowAtIndexPath:toIndexPath:,但fromIndexPath等于toIndexPath(即source == destination)。 我在这里看到了同样的问题:uitableview re-order won't work, source always equal to destination 但解决方案是 - 使用不同的库。这不是我的变种。

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    //fromIndexPath is equal to toIndexPath, so nothing is exchaned
    [self.table_data exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];
}

我的表格处于可编辑模式,我canMoveRowAtIndexPath:返回YES。我没有用。 怎么会?我做错了什么?

2 个答案:

答案 0 :(得分:10)

问题在于自定义平移手势识别器。 它以某种方式与行拖放行为冲突

设置myGestureRecognizer.cancelsTouchesInView = NO;解决了问题

答案 1 :(得分:1)

试试这个。它有效。

- (void)viewDidLoad {
    [super viewDidLoad];
    arr = [NSMutableArray arrayWithObjects:@"First",@"Second",@"Third",@"Fourth", nil];    
    self.tableView.editing = YES;
}

#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return arr.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier" forIndexPath:indexPath];

    UILabel *label = (UILabel *)[cell.contentView viewWithTag:100];
    [label setText:[arr objectAtIndex:indexPath.row]];

    return cell;
}

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

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    NSString *stringToMove = arr[sourceIndexPath.row];
    [arr removeObjectAtIndex:sourceIndexPath.row];
    [arr insertObject:stringToMove atIndex:destinationIndexPath.row];
}

检查屏幕截图 -

enter image description here

enter image description here