I'm developing an app that represents a huge amount of data using UITableView with a custom UITableViewCell.
When the tableView is set to editing mode, it supports multiple selection for further usage of the selected set of data.
Using -tableView:didSelectRowAtIndexPath:
and didDeselect
I'm changing the rows UIImageViews image to a little tick and storing the selection into an array. When selecting a cell it gets light blue background (iOS standard).
When I'm now scrolling down and up again, the cells background is still light blue but the image is reset to default and the cells isSelected
property is NO
. Selecting it again invokes the -tableView:didSelectRowAtIndexPath:
method.
After a while debugging it turned out that the reusable identifier was wrong. But as I corrected it, scrolling down repeated the same 12 cells over and over again. And the isSelected
property is still reset to NO
.
How can I maintain selected rows while scrolling the tableView?! And: Why is the cell blue highlighted (or marked as selected) but the isSelected
property gets reset to No
?
Thanks for help, with kind regards, Julian
Don't use the cell to hold persistent controller state. Instead keep an NSArray
and add the NSIndexPath
of each selected cell to your array (and remove them if/when the user deselects a cell).
Then in cellForRowAtIndexPath:
just make sure you configure the cell correctly based upon whether or not its index-path is in your array of selected cells.