之前的一篇博客已经说过了UITableView中Cell的复用,最近有人问到了我相同的问题,因此再简单说一下。之前博客的地址:
cell的复用:在我们使用了cell的复用之后系统会将移出屏幕的cell放到缓存池中进行缓存,在滑动屏幕的时候显示其他的cell的时候就会从缓存池中取出已经缓存的cell进行复用。由于缓存的cell是之前的cell所以cell上的内容会和之前的cell上的内容一致,因此我们在使用复用的cell的时候还要对其上的内容进行修改以显示当前cell的实际内容。
最近他人问到我的一个实际问题,看图:
问题:在使用cell的复用之后滑动屏幕,每个cell上的文字内容都是没有问题的,可当点击了第一个cell上正常或隐患的单选按钮之后再次上下滑动屏幕,当再回到第一个cell的时候却发现已点击的按钮成了未选中状态。这就是cell复用的问题,当第一个cell使用缓存池中复用的cell的时候文字内容进行了重新设置因此文字内容是没有问题的,可正常和隐患按钮的选中状态却没有进行重新设置,因此出现了问题。解决该问题的方法和设置文字内容的方法是一样的。每个cell的文字信息都存储在了一个数组中,每次调用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
这个方法的时候我们都会将数组中的文字信息传递给对应的cell以让cell使用。我们也应该创建一个长度和存储文字信息相同的数组,在该数组中存储按钮的选中状态,并且在每次点击按钮的时候改变数组中某个按钮的选中状态,这样按钮的选中状态问题也就迎刃而解了。
注意:在今后的开发中如果cell上有某些控件的状态或内容是变化的我们都应该将它们的状态或内容存储下来以便在方法- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中使用。