在iOS上开发了一个有列表的应用,列表中的每一项都是有很多控件组成的,每一项的内容大概一样,自己定制了一下Cell,基本上满足要求了。后来Cell中的UILabel中的内容过长,需要自定义高度,看了一下SDK的文档,可以通过实现下面的方法来解决这个问题。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
返回相应的行的高度,这个函数可以解决问题,每行的高度却是调整了,但是当调整内部的UILabel的高度时出现了问题。调整一个Cell的内容,多个Cell的内容都发生了变化。后来想尽各种办法,不能解决。后来仔细看啦一下SDK的说明,在
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
函数中调用的 dequeueReusableCellWithIdentifier函数有一个重用机制,根据 reuseIdentifier 来进行重用,所以导致一个修改,其他的有可能受到影响,为了修改这种默认行为,重载了UITableViewCell的 reuseIdentifier 函数,在UILabel发生变化时,返回不同的 reuseIdentifier ,这样dequeueReusableCellWithIdentifier函数就不会重用这些修改过的Cell了,如果很多这种类型的,也可以按照规律返回相应的reuseIdentifier,在调用dequeueReusableCellWithIdentifier时,使用相应的reuseIdentifier进行重用。来源:oschina
链接:https://my.oschina.net/u/732121/blog/111194