1

我用ARC创建了一个简单的项目,其中我有UITableView. 我NSMutableArrayNSMutableDictionary

(
        {
        comment = "";
        "field_name" = "field_name 1";
        "main_id" = 1;
        "order_index" = 0;
        "picker_value" = "";
    },
        {
        comment = "";
        "field_name" = "field_name 2";
        "main_id" = 2;
        "order_index" = 1;
        "picker_value" = "";
    },
        {
        comment = "";
        "field_name" = "field_name 3";
        "main_id" = 3;
        "order_index" = 2;
        "picker_value" = "";
    },
        {
        comment = "";
        "field_name" = "field_name 4";
        "main_id" = 4;
        "order_index" = 3;
        "picker_value" = "";
    },
)

"field_name"的值显示在 my 的每个单元格上UITableView。它工作正常。但我想在我UITableViewCell.

例如:

1 value - 0 order_index 
2 value - 1 order_index -----
3 value - 2 order_index      |-> I Want to swap value 2 to 4…(But do not want to change order_index)
4 value - 3 order_index -----

It should Be

1 value - 0 order_index 
4 value - 1 order_index 
3 value - 2 order_index      
2 value - 3 order_index 

value of dictionary will swap but do not  want to change order_index

我知道的方法UITableView

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row > self.MyArray.count-1)
        return NO;
    return YES;
}

// Process the row move. This means updating the data model to correct the item indices.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
      toIndexPath:(NSIndexPath *)toIndexPath
{
    // here i get fromIndexPath.row and toIndexPath.row
    NSMutableDictionary *oldDict = [NSMutableDictionary dictionary];
    oldDict = [(NSMutableDictionary *)[self.listOfReportField objectAtIndex:fromIndexPath.row] copy];

    [self.myArray removeObject:oldDict];
    [self.myArray insertObject:[self.myArray objectAtIndex:toIndexPath.row-1] atIndex:fromIndexPath.row];
    [self.myArray insertObject:oldDict atIndex:toIndexPath.row];

    // Here i am not swap my row , what should be i need to do here ??
 }

b 作为我的要求,我首先要交换 value字典,但不是order_index 在这里。我无法交换价值。

请给我建议。

提前致谢。

4

2 回答 2

3

第 1 步:保存订单索引值以及实际索引(在您的情况下为第 1 个)"order_index" = 1;,也就是第 4 个。

第 2 步:交换(第 2 个值与第 4 个值)。

第 3 步:因为它是数组,所以将索引值替换为实际索引(第 1 步)和第 4 步相同。

编辑:完整的工作代码:

-(void)swapArray:(NSMutableArray *)array MaintaingOrderFrom:(NSInteger)swapFrom swapTo:(NSInteger)swapTo{
    [array exchangeObjectAtIndex:swapFrom withObjectAtIndex:swapTo];
    NSString *tempOrderIndex=array[swapFrom][@"order_index"];
    array[swapFrom][@"order_index"]=array[swapTo][@"order_index"];
    array[swapTo][@"order_index"]=tempOrderIndex;
}

注意:里面的数组和字典应该是可变的。

编辑 2:要检查,我需要创建您的数据模型

NSMutableDictionary *dict1=[NSMutableDictionary dictionaryWithDictionary:@{@"comment": @"",
                     @"field_name":@"field_name 1",
                     @"main_id":@"1",
                     @"order_index":@"0",
                     @"picker_value":@""
                     }];
NSMutableDictionary *dict2=[NSMutableDictionary dictionaryWithDictionary:@{@"comment": @"",
                      @"field_name":@"field_name 2",
                      @"main_id":@"2",
                      @"order_index":@"1",
                      @"picker_value":@""
                      }];
NSMutableDictionary *dict3=[NSMutableDictionary dictionaryWithDictionary:@{@"comment": @"",
                      @"field_name":@"field_name 3",
                      @"main_id":@"3",
                      @"order_index":@"2",
                      @"picker_value":@""
                      }];
NSMutableDictionary *dict4=[NSMutableDictionary dictionaryWithDictionary:@{@"comment": @"",
                      @"field_name":@"field_name 4",
                      @"main_id":@"4",
                      @"order_index":@"3",
                      @"picker_value":@""
                      }];

NSMutableArray *array=[NSMutableArray arrayWithArray:@[dict1,dict2,dict3,dict4]];

[self swapArray:array MaintaingOrderFrom:1 swapTo:3];

NSLog(@"%@",array);
于 2013-04-01T17:40:05.240 回答
1

NSMutableArray 有一个方法- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2 为什么不使用 fromIndexPath 和 toIndexPath 的两个值调用该方法?

如果我正确阅读了您的问题,您希望字典中的“order_index”K/V 对与数组顺序匹配吗?使用上述方法交换值后,您可以调用:

[[self.myArray objectAtIndex:fromIndexPath.row] setObject:[NSNumber numberWithInt:fromIndexPath.row] forKey:@"order_index"];
[[self.myArray objectAtIndex:toIndexPath.row] setObject:[NSNumber numberWithInt:toIndexPath.row] forKey:@"order_index"];
于 2013-04-01T18:37:08.683 回答