2012-09-23 38 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

相關問題