2011-12-29 71 views
1

我在tableView中有超過50行。如果我必須查看第50格,我將不得不向下滾動。我也啓用了多個選擇到我的表。問題是,當我選擇像5行,然後向下滾動,我也得到了一些其他行也被選中(行,我沒有選擇,並自動選擇,當我滾動下面)。單元格行多選

1.)我如何克服這一點?

cellForRowAtIndexPath方法

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    [email protected]"Text values"; 
} 

didSelectRowAtIndexPath方法

UITableViewCell *cell = [self.tble cellForRowAtIndexPath:indexPath]; 

if ([cell accessoryType] == UITableViewCellAccessoryNone) { 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 

} 
else { 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 

} 

2)我不知道如果我的作品didSelectRowAtIndexPath正確(如允許多個行選擇)有人可以幫我解決這個

回答

2

您正在通過設置單元附件視圖來存儲選擇內容。當您重複使用選定的單元格時,附件視圖不會重置。您還需要在cellForRowAtIndexPath中設置或取消設置附件視圖(如果索引路徑是表視圖選擇的一部分(indexPathsForSelectedRows),則取消設置)。

你也可以發現它有助於選中狀態存儲爲您的數據模型的一部分,這樣你就可以在didSelect輕鬆切換...也知道什麼配件鑑於cellForRow顯示...

1

你的問題是,因爲你正在重複使用單元格,單元格會顯示覆選標記,如果你不「清理」它們...你可以做的是保持一些數組,以跟蹤哪些單元格被檢查,初始化爲任何它是你想要它們,然後在索引路徑的單元格中,您需要將單元格設置爲已選中或未設置...例如

didSelectRowAtIndexPath可以看起來像

if ([cell accessoryType] == UITableViewCellAccessoryNone) { 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
    [_array insertObject:[NSNumber numberWithInt:1] atIndex:indexPath.row]; 

} 
else { 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 
[_array insertObject:[NSNumber numberWithInt:0] atIndex:indexPath.row]; 
} 

然後cellForRowAtIndexPath你可以做

BOOL checked=[[_array objectAtIndex:indexPath.row] boolValue]; 
    if(checked) 
{ 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
} 
else 
{ 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 
} 

希望它有助於

+0

說'//檢查你的意思'的cell'如果(細胞==零){ 電池= [[ UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; ?? cell.textLabel.text = @「Text values」; }' – sharon 2011-12-29 18:06:12

+0

不,我的意思是將附件標記標記爲複選標記 – Daniel 2011-12-29 18:08:02

+0

如果我不想添加附件標記而只是希望將其突出顯示,那麼要注意什麼。無論如何,我能做到這一點嗎? – sharon 2011-12-29 18:17:02