2011-08-26 52 views
1

當我選擇一行我hav使didSelectRowAtIndexPath放置一個複選標記指示器。我的表格視圖存在於彈出式窗口中,並且可以在屏幕中容納更多的數據。問題是,當我向下滾動查看更多的行時,第一個單元格加載時,滾動也有複選標記指示器。didselectrowatindexpath方法無法正常工作,如果tableview有更多的行比它可以顯示在ipad屏幕上

例如,如果我在我的表格視圖中有30行,並且如果我選擇我在屏幕上的行並且屏幕可以容納15行。如果我滾動查看更多的第16行也有複選標記。 同樣,如果我選擇2行並向下滾動第17行也被選中。

我需要一次只有一個用戶選擇的行。我didselectrowatindexpth不是一致工作。如果任何人有一個適當的工作vesion請分享或建議我如何解決這個問題。 另外,我在我的表格視圖中有兩個部分。所以用戶可以從任何一個部分只選擇一行。

我的didSelectRowAtIndexPath代碼。

int newRow = [indexPath row]; 
int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1; 

if (newRow != oldRow || (newRow == 0 && oldRow == 0)) { 
    UITableViewCell *cell = [bTableView cellForRowAtIndexPath:indexPath]; 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
    UITableViewCell *oldCell = [bTableView cellForRowAtIndexPath:lastIndexPath]; 
    oldCell.accessoryType = UITableViewCellAccessoryNone; 
    lastIndexPath = indexPath; 

回答

2

你對細胞的任何變更應在cellforrowatindexpath委託方法,因爲他們被重用被重置。因此,在用此方法返回單元格之前重置。並有一個變量來保存選定的值並相應地更新。所以基本上你的數據源應該能夠保存所選行的值而不是單元格。