You don't need to call reloadData
at all. All you need to do is to update the cell that was selected.
In the didSelectRowAtIndexPath
method you can get the cell directly by calling cellForRowAtIndexPath
on the tableView
. This will return the actual cell that's on display and you can directly set the image it's displaying.
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.imageView.image = ...;
Alternatively you could control the image display from your cell subclass if you provide it with both the normal and selected images when you configure each instance.