尝试重新排序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
。我没有用。
怎么会?我做错了什么?
答案 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];
}
检查屏幕截图 -