菜鸟教程小白 发表于 2022-12-13 17:03:08

objective-c - UITableView 删除所有可重复使用的单元格


                                            <p><p>当单元格第一次变得可见时,将使用 init 方法。
当单元格不是第一次变得可见时,它将从 TableView 的内存中出列。</p>

<pre><code>UITableViewCell *cell = ;
if (cell == nil)
{
    cell = [ initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
}
return cell;
</code></pre>

<p>假设我已经滚动了整个表格,现在任何单元格都可以出列,因为它们都已经被初始化了。</p>

<p>我当前的单元格的标识符从 0 到 199。我刷新了我的表格 View ,现在我有了新的单元格信息。我使用方法 <code>reloadData</code> 并通过将 <code>+200</code> 添加到单元格标识符来为新单元格使用从 200 到 399 的标识符:</p>

<pre><code>NSInteger index = indexPath.row + 200;
NSString *CellIdentifier = ;
</code></pre>

<p>现在我滚动整个表格并查看从 200 到 399 的单元格。</p>

<p>假设我将 <code>index</code> 改回:</p>

<pre><code>NSInteger index = indexPath.row;
</code></pre>

<p>现在一个问题:标识符从 0 到 199 的旧单元仍然可以出队,不是吗?</p>

<p>如果答案是<code>他们可以出队</code>我还有一个问题:</p>

<p>当我开始使用标识符为 200 到 399 的单元格时,有没有办法从 TableView 内存中删除标识符为 0 到 199 的单元格?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><code>UITableView</code> <code>dequeueReusableCellWithIdentifier</code> 方法将为您处理。如果您使用 <code>static ;</code></p>

<p>这是来自 <a href="https://discussions.apple.com/thread/2760904?start=0&amp;tstart=0" rel="noreferrer noopener nofollow">apple discussion thread</a> 的讨论.也检查一下。</p>

<p><strong>更新:</strong>
    您需要修改您的单元格标识符。如果要为每一行创建新的 CellIdentifier,则使用 <code>dequeueReusableCellWithIdentifier</code> 毫无意义,因为标识符每次都不同。</p>

<p>代替</p>

<pre><code>NSString *CellIdentifier = ;
</code></pre>

<p>应该是,</p>

<pre><code>static NSString *CellIdentifier = ;
</code></pre>

<p>这意味着一旦不可见,每个单元格都将被重复使用。它只会选择不可见的单元格,并将其重用于您正在显示的下一组单元格。根据您的实现,它将创建 300 或 400 个单元格,您无法删除以前的单元格,因为您不再有任何引用。</p>

<p>您的方法将如下所示,</p>

<pre><code>static NSString *CellIdentifier = ;
UITableViewCell *cell = ;
if (cell == nil)
{
    cell = [ initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier];
}
cell.textLabel.text = @&#34;something&#34;;
//...
return cell;
</code></pre>

<p><strong>Update2:</strong>如果你没有使用 ARC,应该是,</p>

<pre><code>cell = [[ initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier] autorelease];
</code></pre>

<p>你需要一个 <code>autorelease</code> 来做同样的事情。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - UITableView 删除所有可重复使用的单元格,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/12870171/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/12870171/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - UITableView 删除所有可重复使用的单元格