2013-05-22 81 views
1

我有一個動態表,用戶可以在其中添加&刪除數據。該表格顯示購物清單。如果購物完成,用戶應該能夠勾選需要的項目,並且應該能夠取消勾選,我已通過設置accessorybutton來實現此目的。但是,問題出在我從中刪除一行時,單元格被刪除,但附加到該單元格的附加按鈕保持相同狀態。在ios中維護輔助視圖的狀態

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (cell.accessoryView == nil) 
    {  
    cell.accessoryView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tick_btn"]]; } else { cell.accessoryView = nil; 
    } 
} 
+1

PLS顯示我們的代碼 – manujmv

+0

' - (空)的tableView:(UITableView的*)的tableView didSelectRowAtIndexPath方法:(NSIndexPath *)indexPath {cell = [tableView cellForRowAtIndexPath:indexPath]; 如果(cell.accessoryView ==無) { cell.accessoryView = [[ALLOC的UIImageView] initWithImage:[UIImage的imageNamed:@ 「tick_btn」]]; } else { cell.accessoryView = nil; } }' – JgdGuy

回答

0

因爲UITableView的典型重用UITableViewCell的情況下的,你必須確保你的'-tableView:cellForRowAtIndexPath:方法正確設置單元格的所有屬性。其他陳舊的數據可以持續存在。我猜這可能是你的問題,缺乏完整的代碼。

所以,這樣的事情:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString* cellIdentifier = @"TheCellIdentifier"; 
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 

    ShoppingObject* shopping = [self.myShoppingList objectAtIndex:indexPath.row]; 
    UIImageView* accessoryView = nil; 

    if (shopping.isDone) { 
     accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tick_btn"]]; 
    } 

    cell.accessoryView = accessoryView; 

    return cell; 
} 

它獲得小區,無論是從重用高速緩存或創建一個新的。然後,它會檢查數據模型的狀態,以查看是否購物已完成或未在該行中呈現的對象,以及購物完成後是否爲您提供圖像。請注意,購物沒有完成,沒有創建accessoryView,因此無論ShoppingObject的狀態如何表示在該表格行中,該單元的accessoryView都將被正確設置。

那麼,我可能會在你的-tableView:didSelectRowAtIndexPath:中做的事情就是在表格上簡單地-reloadData,以確保一切正確更新。

+0

好吧,沒有檢查購物是否完成的方法,如果用戶完成購物清單中提到的任務,用戶可以選擇打勾。 我的意思是我不能確定要顯示的刻度,它需要顯示在行被選中。 – JgdGuy

+0

那麼什麼是跟蹤你的數據? GUI本身? – hsoi

+0

用戶可以在他的列表中添加n個刪除隨機事物。我已經完成了購物,他/她可以打個勾。 – JgdGuy

0

你需要跟蹤所選項目

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (cell.accessoryView == nil) 
    {  
    cell.accessoryView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tick_btn"]]; 
    [self.checkedIndexPaths addObject:indexPath]; 
    } 
    else { 
    cell.accessoryView = nil; 
    [self.checkedIndexPaths removeObject:indexPath]; 
    } 

} 

的編輯

​​
+0

什麼是checkedIndexPath? – JgdGuy

+0

只是一個NSMutaleArray存儲selectedItems的indexPath –

+0

不幫助:(試過..! – JgdGuy