首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在UITableViewCell中使用备用accessoryType

在UITableViewCell中使用备用accessoryType
EN

Stack Overflow用户
提问于 2010-08-29 16:40:36
回答 3查看 888关注 0票数 1

我基本上是想根据特定的情况显示一个UITableViewCellAccessoryDisclosureIndicator,在本例中,我的行数据中存在一个URL (我通过indexPath.row引用它。

我有正确的代码来解决这个问题(例如,如果一个网址存在),但是我不确定我应该在"cellForRowAtIndexPath:“方法中的什么地方声明这个代码。我在if(单元格== nil)子句内部和外部尝试过,两次都会在单元格滚动返回视图时重新绘制单元格,有时会有或没有指示符。

它在初始绘制时工作得很好。

关于如何最好地实现这一点,有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-29 16:59:44

是的,你应该把它放在"if (cellForRowAtIndexPath == nil)“语句之外的cellForRowAtIndexPath: delegate方法中。由于单元被回收,您必须确保将每个单元的附件类型设置为正确的值,而不仅仅是那些需要特定附件类型的单元。

例如:

代码语言:javascript
运行
复制
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)ip {
    UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:@"CELL"];

    if (cell == nil) {
        cell = [[[UITableView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL"] autorelease];
    }

    if (ip.row == 3) {
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    return cell;
}

这段代码不会以我们想要的方式工作。由于单元被回收,因此附件类型设置为UITableViewCellAccessoryDisclosureIndicator的单元稍后将在未定义的行处被重用,并且随后将显示公开指示符,即使它不位于第3行。

为了处理单元格的重用,我们必须为每个单元格设置附件类型,无论它们的行是什么:

代码语言:javascript
运行
复制
    if (ip.row == 3) {
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    else {
        cell.accessoryType = UiTableViewCellAccessoryNone;
    }

我不确定这是否解释了你的问题,但它看起来肯定与细胞重用有关。

编辑:

好了,当我输入答案的时候,你自己找到了答案。:o)

票数 2
EN

Stack Overflow用户

发布于 2010-08-29 16:47:26

检查完条件后,很快就可以通过indexPath设置您感兴趣的单元格。然后,也许你想调用reloadData

票数 0
EN

Stack Overflow用户

发布于 2010-08-29 16:54:58

答案毕竟很简单。当URL存在时,我正在设置UITableViewCellAccessoryDisclosureIndicator。我没有做的就是在没有网址的情况下设置一个UITableViewCellAccessoryNone。因此,在重绘时,它会记住一行并将其设置为on。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3594104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档