问题标签 [reuseidentifier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1990 浏览

objective-c - 如何在 xcode 中设置 UITableViewCell 标识符?

当我在项目的视图控制器中的 UITableView 中选择一个单元格时,我随机崩溃。

我认为问题是由我试图重用的单元格引起的。

这是代码。

我在 XCode 中创建我的表。因此,IB 中没有具有标识符的 UITableViewCell 对象。

是否可以在创建表时在代码中添加它?还是其他地方的问题?

谢谢

0 投票
2 回答
448 浏览

objective-c - 在单元格中设置图标图像的问题

我正在尝试在表格视图的每个单元格中创建一个“blank_star 图标”,用户单击它后,该星应该变成一个“实心”星。

我创建了一个子类,UIButton如下所示

我在表格视图的cellforRow:方法中添加了 UIButton 的子类,如下所示:

但是我在运行应用程序时遇到了问题。例如,如果我单击标记为“a”的单元格,星形将按预期变为实心。

在此处输入图像描述

奇怪的是,向下滚动后,我还看到其他一些带有实心星的单元格(参见单元格'e')。

在此处输入图像描述

任何人都可以帮助解释为什么会这样吗?似乎state该单元格的 正在被其他单元格重新使用。我怎样才能避免这种情况发生?

0 投票
2 回答
922 浏览

iphone - UITableViewCell backgroundView 在不应该被重用时被重用

我想为我的表格视图单元格添加自定义背景和选定的背景图像。目前似乎当单元格被重用时,背景图像被搞砸了,顶部单元格将使用底部单元格图像,等等。

在这种情况下,我是否错误地重复使用了单元格?

0 投票
3 回答
212 浏览

iphone - 禁用单元重用的开销

所以我有 3 个部分,每个部分有 3 行(总共 9 行),每行作为textField.

我在 tableView 上遇到了一些问题,当我向上和向下滚动时,单元格与值混合在一起非常烦人,整个 tableView 变得一团糟。尽管我的编程中缺乏逻辑可能会导致此问题,但我已决定立即解决此问题。

所以,我现在禁用dequeueReusableCellWithIdentifier,现在一切似乎都好了。从 Apple 文档中,我可以看到可重用性可以为大型 tableViews 提供良好的性能。我现在已经阻止了细胞重用

我只有 3 个部分,每个部分 3 行。

  1. 我们在这里谈论的性能下降幅度究竟是多少?

  2. 这将如何影响我的整个应用程序,请记住我在该视图中有一个小的 tableView ?

  3. 在 App-Store 中批准此应用程序是否有任何复杂情况?

ps我仅将这种方法用于一个视图。所有其他视图都有可重用的单元格。

0 投票
4 回答
27340 浏览

ios - initWithFrame:reuseIdentifier:已弃用

在我的项目中,我收到了弃用警告, initWithFrame : reuseIdentifier : 已弃用

我不知道这是什么意思,谁能告诉我如何解决这个警告谢谢

这是短代码

并且警告在那一行:

0 投票
1 回答
940 浏览

ios - dequeueReusableCellWithIdentifier:记住单元格的状态

我已经在表格单元格中嵌入了水平表格视图(ala Pulse Reader)。我得到的有趣行为是,它dequeueReusableCellWithIdentifier:似乎正确地记住了嵌入表视图的偏移量,而我没有做任何事情。但是“记住”有两种口味

第一(预期)

我创建了一个包含 100 个部分和每个部分 1 行的表。每个单元格(每个部分)都有一个嵌入的表格视图,我强制它拥有 100 行和 1 个部分。当我滚动垂直表格视图时,单元格被重用(通过查看单元格的实例名称来检查dequeueReusableCellWithIdentifier:

如果我将第一个表格视图单元格的嵌入表格视图向右滚动,例如 10.5 个单元格,当我在垂直表格视图中向下滚动几个单元格时,重用的表格单元格的嵌入表格视图偏移了这 10.5 个单元格。这是有道理的,单元格只是被重用了,我没有重置任何偏移量。假设重用单元格是第 7 行。如果我现在将第 7 行的嵌入表格视图(由于重用,这与第一行的嵌入表格视图相同)滑动到位置 20,当我转到嵌入表格视图的垂直表格视图的顶部时(我有最初移动到 10.5),现在是 20。同样,预期,这些表格单元格是相同的。刚刚重复使用。

第二(需要,但不知道它是如何工作的)

现在我填写我的真实数据(而不仅仅是打印

到细胞。

现在,突然之间,我的嵌入式表格视图确实记得它们在哪里。我再次确保细胞被重复使用(与上述相同的方法)。但是这一次,当我滚动第一个嵌入的表格视图(到位置 10.5)并向下滚动到第七行时,第七行是它的起点。当我将第一行滚动回视图时,它就在我离开它的地方。

这是使用 Xcode 4.2 和 iOS 5.0。有什么聪明的东西dequeueReusableCellWithIdentifier:吗?

在旧学校(iOS 5.0 之前),我会检查

一些逻辑来查看正在发生的事情,但是对于 StoryBoard,这些不再是必需的。

行为不同的 2 个示例项目有点大,但是如果您想查看任何相关代码,请告诉我。

抱歉含糊不清,我只是想准确掌握这些表视图的内存管理发生了什么。

所有连接都通过 IBOutlets 并在 StoryBoard 中进行。

谢谢!

第一个垂直表视图控制器

第一个水平表视图委托/数据源

第二个垂直表视图控制器

第二个水平表视图委托/数据源

0 投票
1 回答
1710 浏览

iphone - UITableView dequeueReusableCellWithIdentifier:返回零

我有一个具有各种自定义 UITableViewCells(和单元格标识符)的 UITableView 的应用程序。

在我实现tableView:cellForRowAtIndexPath:的方法中,我使用了 UITableView 的dequeueReusableCellWithIdentifier:方法,它在用户滚动表格期间调用时给了我预期类型的​​ UITableViewCell,但是,如果我尝试在代码的其他部分检索可重用单元格,我将得到 nil结果,因此必须实例化一个新单元格。

例如,插入要显示的新对象的代码如下所示:

尽管刚刚离开屏幕的单元格与我插入的类型相同(相同的单元格标识符),但这会触发tableView:cellForRowAtIndexPath:and 在该调用上返回 nil 。dequeueReusableCellWithIdentifier:

不应该给一个可重复使用的细胞吗?就我而言,这可能会成为问题,因为我的单元格由于其复杂性而具有某种“重”的 init 方法。

提前致谢

Edit1:为了澄清,我想知道为什么表缓存中没有未使用的单元格实例返回,因为某些单元格(我插入的相同类型)刚刚退出可见?

0 投票
2 回答
7283 浏览

ios - iOS - UITableView 不显示单元格

我在情节提要中设置了以下界面:

在此处输入图像描述

控制器是从 UITableViewController 扩展而来的自定义控制器。当我运行我的应用程序时,这就是我得到的:

在此处输入图像描述

我认为这可能与重用标识符有关,所以我将它们更改为每个单元格唯一的东西,并相应地修改了代码,但仍然没有任何显示。

0 投票
2 回答
1776 浏览

ios - 通过单元格重用错误绘制的 UITableView 分隔符?

我正在开发一个带有故事板的 iOS 5 项目,因此在 IB 中使用动态表格单元格原型。在其中一个视图中,我有一个带有可变高度单元格的表格视图,单元格高度是根据内容的高度计算的。

tableView:heightForRowAtIndexPath:首次显示表格视图时,为所有单元格返回正确的值。向下滚动一些项目时一切都很好,但随后出现了问题:实际的单元格似乎是正确的高度,包括它们的触摸区域,但它们的分隔符呈现在错误的位置(在单元格内部而不是它们之间)。

从测量分隔器的位置来看,似乎细胞重复使用可能与此有关。前三个单元格的分隔符正确呈现,但第四个单元格不正确。heightForRowAtIndexPath:返回正确的高度(在本例中为 125 像素),并且其包含的子视图都在正确的位置。但是,分隔符仅呈现距离前一个分隔符 108 像素的位置,将其放置在单元格的 125 像素高区域内。

这是踢球者:108px 是第一个表格单元格的高度,现在看不见并且可能被重复使用。我没有明确的证据,但似乎表格视图忽略heightForRowAtIndexPath:了这些单元格,只是根据重用的单元格高度呈现分隔符。

这并不能解释为什么一堆后来的较短的单元格根本没有呈现分隔符。但这就是我所要做的。

是否有解决方法、IB 设置或其他可能有帮助的方法?

0 投票
2 回答
515 浏览

objective-c - UITableViewCell 使用重用标识符通过回调块给出不需要的结果

当 loadImage 的回调块在下面运行时,表格单元格可能已被重用。所以应用到“imageView”的图像与这个重用单元格无关,它是旧单元格的图像。

如果我为每个具有图像的单元格设置唯一的标识符,问题就会消失。但这会导致性能不佳,结果很多。

我可以以某种方式将相同的重用标识符与回调块一起使用,并使图像出现在正确的单元格中吗?