0

我使用自定义单元格。我想移动这个单元格(更改单元格的位置)

我用了这个代表团

UITableViewDataSource,UITableViewDelegate

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *Cellidentifier = @"Celledit";
CellEdit *editCell =[tableView dequeueReusableCellWithIdentifier:Cellidentifier];

if (!editCell) {
    editCell = [[CellEdit alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Cellidentifier];
}

MItem *mItem = [mItems objectAtIndex:[indexPath row]];


 ---------------------------------
 // set data 3 labales in the cell
 --------------------------------- 

editCell.editdelegate = self;
return editCell;

editcell 是我的自定义单元格

[_tableViewEdit setEditing:YES animated:YES];这条线放入- (void)viewDidLoad

我想一直编辑它

    // table view change cells
- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleNone;
}

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

- (void) tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {

    NSInteger sourceRow = sourceIndexPath.row;
    NSInteger destRow = destinationIndexPath.row;
    id object = [minutesItems objectAtIndex:sourceRow];

    [minutesItems removeObjectAtIndex:sourceRow];
    [minutesItems insertObject:object atIndex:destRow];

}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    for (UIControl *control in cell.subviews)
    {
        if ([control isMemberOfClass:NSClassFromString(@"UITableViewCellReorderControl")] && [control.subviews count] > 0)
        {
            for (UIControl *someObj in control.subviews)
            {
                if ([someObj isMemberOfClass:[UIImageView class]])
                {
                    UIImage *img = [UIImage imageNamed:@"logocoffee.png"];
                    ((UIImageView*)someObj).frame = CGRectMake(0.0, 0.0, 43.0, 43.0);
                    ((UIImageView*)someObj).image = img;
                }
            }
        }
    }
}


}

移动单元模拟器不显示右侧控制图标

为什么这个?这意味着不能移动服装细胞?

4

2 回答 2

4

试试这个代码,

您应该使用以下两种方法,

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

使用此方法移动行

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath 
{
   [label1array exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];
    [label2array exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];
    [label3array exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];
}
于 2013-10-24T12:18:10.137 回答
3

自定义单元格也可以移动。

从您的代码示例中,我们看不到您在编辑模式下设置表格视图的位置。

也许问题是因为您从未设置编辑模式。

如果是这样,请尝试在标题栏中添加一个编辑按钮,例如,该按钮应链接到以下方法:

- (IBAction) EditTable:(id)sender{
 if(self.editing)
 {
    [super setEditing:NO animated:NO]; 
    [yourTableView setEditing:NO animated:NO];
    [yourTableView reloadData];
    [self.navigationItem.leftBarButtonItem setTitle:@"Edit"];
 }
 else
 {
    [super setEditing:YES animated:YES]; 
    [yourTableView setEditing:YES animated:YES];
    [yourTableView reloadData];
    [self.navigationItem.leftBarButtonItem setTitle:@"Done"];
 }
}

我认为这个应该可以解决您的问题。

编辑:要在您的情况下恢复,至少,您只需要在 viewDidLoad 中的编辑模式下设置表格视图,并在需要时对其进行更新:

[yourTableView setEditing:YES animated:YES];
[yourTableView reloadData];

并实现两个回调:

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

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
     //Even if the method is empty you should be seeing both rearrangement icon and animation.
}

我尝试使用自定义单元格,它工作正常。

于 2013-10-24T09:33:20.130 回答