2011-06-24 124 views
1

讓我們奇怪的問題有兩個可變陣列,讓我們有下面的代碼:與[的tableView reloadData]

- (void)viewDidLoad 
{ 
    NSMutableArray *A = [[NSMutableArray alloc] init]; 
    NSMutableArray *B = [[NSMutableArray alloc] init]; 
    // fill up A 
    // B remains empty 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // ... 
    if (...) 
    { 
     // fill up the cell with datas of an object from A 
    } 
    else 
    { 
     // fill up the cell with datas of an object from B 
    } 
    //... 
    return cell; 
} 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (...) 
    { 
     // remove an object from A and put it in B 
    } 
    else 
    { 
     // remove an object from B and put in A 
    } 
    [tableView reloadData]; 
} 

如果[的tableView reloadData]被註釋掉(// [的tableView reloadData]),比後按照預期,「點擊」表格不會失效。如果當前單元格再次滾動並在屏幕上再次滾動,則會調用「cellForRowAtIndexPath」,並根據從哪個數組獲取其內容的方式,將單元格「繪製」爲正確。 但是,如果[tableView reloadData]處於活動狀態,而「cellForRowAtIndexPath」根本沒有被調用(!)並且單元格從屏幕上被刪除!

反應:WHUT?

可以幫助我的任何人如何使桌面視圖無效(而不是通過滾動單元格和:))!

在此先感謝!

+0

我會在didSelectRowAtIndexPath方法中更新受影響的單元格,而不是在那裏調用reloadData。 – onnoweb

+0

您是否使用不同的單元格標識符? –

+0

您是否嘗試過使用'delete/insertRowsAtIndexPaths:withRowAnimation'?只要你的數組匹配了這些變化,這應該會立即改變你的tableView而不需要調用'reloadData'。 – justin

回答

0

這是我的錯。這是一個非常好的經驗,對我來說這件事。 的方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [A count] + [B count]; 
} 

僅含[A計數][B計數]不..實際上與reloadData它wors屬性格式。無論如何,它適用於滾動 - 向下滾動,而numberOfRowsInSection不會再次查詢。

謝謝大家的支持!

0

您需要使用UITableView method -deleteRowsAtIndexPath ...執行您嘗試實現的刪除。儘管蘋果可能不會批准這種UI範例,因爲它違反了HIG。

考慮使用編輯屬性以及-commitEditingStyle... of the UITableViewDatasource進行刪除。用戶已經熟悉這種表格視圖的用法,並且不會被Apple拒絕。

+0

感謝您的回答,但我可能不理解它。我不想刪除任何行。當用戶點擊它時,我想將一個數組中的對象放到另一個數組中。這兩個數組應該在tableview中可見。試想一下,B數組將包含所選對象,並在其上應用某種類型。 A數組包含未選中的對象。簡單的複選框是不夠的,而不能有排序方法。這只是一個例子來描述問題,真正的任務有點複雜。 – Barna

+0

您可能想重新考慮您對問題的處理方法。試圖使用兩個數組來跟蹤合併到單個表中的對象,而不使用分節,將會非常痛苦。也許你可以在單個數組上使用表格進行選擇,排序和其他任何你需要的內容,並且當用戶完成時(通過按下按鈕或關閉應用程序)遍歷數組並在那裏構建你的兩個數據表示點。否則,你將會與UITableView相沖突。 – RyanR

相關問題