iPhone cellForRowAtIndexPath 返回缓存的单元格

发布于 2024-08-23 02:50:31 字数 364 浏览 5 评论 0原文

当我使用以下方法向单元格添加标签时:

- (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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

っ左 2024-08-30 02:50:31

给出唯一标识符名称,例如:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = NSLocalizedString(@"Cell",@"");
…
}

不要给出常量标识符名称,而是给出您自己的唯一标识符名称,例如:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = [self getuniqueID];
...
}

这将解决您的问题。

Give unique identifier name like:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = NSLocalizedString(@"Cell",@"");
…
}

instead of giving constatnt identifier name, give your own unique identifier name like:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = [self getuniqueID];
...
}

This will solve your problem.

屌丝范 2024-08-30 02:50:31

如果您的单元格是 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.

橙味迷妹 2024-08-30 02:50:31

为什么不简单地简化事情并默认隐藏标签并将其包含在所有单元格中。

当您点击单元格时,无需添加视图 - 只需显示那里但隐藏的视图。

完成后,隐藏标签。

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.

幻梦 2024-08-30 02:50:31

您需要跟踪每个单元格当前是否应用了标签。在 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.

别再吹冷风 2024-08-30 02:50:31

我有时使用此代码:(当单元格!= nil 时)

NSArray *subviews = [[NSArray alloc] initWithArray:cell.contentView.subviews];
for (UIView *subview in subviews) {
    [subview removeFromSuperview];
}
[subviews release];

它删除缓存单元格的所有子视图。

I sometimes use this code: (When the cell != nil)

NSArray *subviews = [[NSArray alloc] initWithArray:cell.contentView.subviews];
for (UIView *subview in subviews) {
    [subview removeFromSuperview];
}
[subviews release];

It removes all subviews of an cached cell.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文