2012-09-23 34 views
0

我有一个包含两个自定义单元格的表格视图部分。当某些其他操作触发时,我想交换该部分中的单元格。在表格视图部分中交换单元格

enter image description here

顶部电池应滑动底部,底部电池应滑落到顶部。

我当前的代码导致的空白单元格区域

enter image description here

cellForRowAtIndexPath回报:

// flag is set to YES when reloadSections is called 
    if (flag) {    

     if (self.currentAddressingMode == AddressingModeToSelf) { 

       if (indexPath.row == 0) { 
        return self.outNumberCell; 
       } 
       else if (indexPath.row == 1) { 
        return self.inNumberCell; 
       } 

      } 
      else if (self.currentAddressingMode == AddressingModeToCounterpart) { 

       if (indexPath.row == 0) { 
        return self.inNumberCell; 
       } 
       else if (indexPath.row == 1) { 
        return self.outNumberCell; 
       } 
      } 
     } 

有没有解决方案?

+0

我不确定你想要什么,你应该交换数据模型(数组)中的两个对象,并为表执行reloadData。 – NeverBe

回答

0

我已经通过在cellForRowAtIndexPath:方法中创建自定义单元格(通过向它们添加子视图)而不是子类化来解决此问题。对于动画单元交换,我使用了UITableViewmoveRowAtIndexPath:toIndexPath:方法(iOS 5 SDK)。其他相关方法也可以正常工作(这取决于您需要的交换动画)。我发布到这个问题的代码块完全没有改变。

0

如果需要,您可以返回所需的单元格(UICell*) cellForRowAtIndexPath,然后reloadSections动画。

+0

我试过了......它没有像预期的那样工作(cellForRowAtIndexPath返回时单元格区域变为空白)。 – rmxmaster

+0

你使用动态单元吗? – dreamzor

+0

是的,所有单元格都以编程方式创建,没有IB /故事板。增加了一个代码块的问题。 – rmxmaster

0

为了发生这种情况,您需要自己在dataSource中更改数据的顺序。然后你可以这样做reloadData:

[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];

+0

当方法返回时,它目前会导致空白单元格的区域。增加了一个代码块的问题。 – rmxmaster

+0

不要在cellForRow中返回任何具有特殊情况的东西...只需更改dataSource中的顺序即数据源,该数组是您的表的数据,然后调用我所写的方法。如果... else ...条件对数据进行排序和重新排序,而不是在cellForRow中使用这些相同的条件,则您可以冷使用相同的条件... – Ravi

+0

这两个单元格直接在cellForRowAtIndexPath中创建,但没有数据源。另外,我需要在重新排序时保留单元格文本字段的文本。试图把这些单元格放在一个数组中,并改变它的顺序 - 同样的问题,没有任何改变。 – rmxmaster

相关问题