如何移动uitableview自定义单元格?

时间:2013-10-24 08:27:26

标签: ios objective-c ios6 uitableview

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

我使用了这个代表团

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;
                }
            }
        }
    }
}


}

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

为什么这个? 这意味着无法移动服装细胞?

2 个答案:

答案 0 :(得分:3)

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

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

问题可能是因为您从未设置编辑模式。

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

- (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.
}

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

答案 1 :(得分:3)

试试这段代码,

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

- (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];
}