iPhone cellForRowAtIndexPath 返回缓存的单元格
当我使用以下方法向单元格添加标签时:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell addSubView:someLabel];
}
它将标签添加到多个单元格,因为它将标签添加到缓存的单元格。因此,tableView 中使用缓存单元格的每个单元格都会显示我的标签。
有人知道解决方法吗? 吨
When i add a label to a cell using:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell addSubView:someLabel];
}
It adds the label to multple cells, because it adds the label to a cached cell. So every cell in the tableView thats uses a cached cell, will display my label.
Does somebody knows a way around?
Ton
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
给出唯一标识符名称,例如:
不要给出常量标识符名称,而是给出您自己的唯一标识符名称,例如:
这将解决您的问题。
Give unique identifier name like:
instead of giving constatnt identifier name, give your own unique identifier name like:
This will solve your problem.
如果您的单元格是 UITableViewCell 的子类,您可以重写
- (void)prepareForReuse
,它会在从- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier< 返回单元格之前调用/code>
这是为单元提供“干净的状态”的方法,但仅限于将要重用的缓存单元。
If your cell is a subclass of UITableViewCell, you can override
- (void)prepareForReuse
which gets called just before the cell is returned from- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier
This is the way to provide a 'clean slate' for your cells, but only the cached ones that are about to be reused.
为什么不简单地简化事情并默认隐藏标签并将其包含在所有单元格中。
当您点击单元格时,无需添加视图 - 只需显示那里但隐藏的视图。
完成后,隐藏标签。
Why not just simplify things and just hide the label by default and include it on all the cells.
When you tap the cell, then instead of adding a view - just show the one that is there but hidden.
When you are done, hide the label.
您需要跟踪每个单元格当前是否应用了标签。在
cellForRowAtIndexPath:
中检查它是否应该存在,如果是,则根据需要添加它,否则根据需要删除它。You'll need to keep track of whether or not each cell has the label currently applied. In
cellForRowAtIndexPath:
check if it should be there, if so then add it if necessary, else remove it if necessary.我有时使用此代码:(当单元格!= nil 时)
它删除缓存单元格的所有子视图。
I sometimes use this code: (When the cell != nil)
It removes all subviews of an cached cell.