2013-10-24 59 views
0

我使用自定義cell.I想遷移細胞(細胞的改變位置)如何移動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; 
       } 
      } 
     } 
    } 
} 


} 

移動電池模擬器沒有表現出右側控制圖標

爲什麼呢? 這意味着不能移動服裝細胞?

回答

3

自定義單元格也可以移動。

從您的代碼示例中,我們看不到您在編輯模式下設置tableview的位置。

也許這個問題是因爲你從不設置編輯模式。

如果是的話,嘗試在例如標題欄,應該鏈接到的方法,如添加一個Edit按鈕:

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

我試過自定義單元格,它工作正常。

+0

我將它設置在 - (無效)viewDidLoad中 [_tableViewEdit setEditing:YES animated:YES];這條線 我希望它始終可編輯。 – Suravi

+0

您是否也調用super的方法,如示例:'[super setEditing:YES animated:YES]'? – Lisarien

+0

是的,我將它添加到viewDidLoad中。自定義UITableViewCell的晚餐方法呢? – Suravi

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]; 
} 
+0

已經在上面添加了方法 – Suravi