如何在 UITableView 中实现 dequeueReusableCell(withIdentifier:) 的代码?

     2023-03-12     202

关键词:

【中文标题】如何在 UITableView 中实现 dequeueReusableCell(withIdentifier:) 的代码?【英文标题】:how to Implement the code for dequeueReusableCell(withIdentifier:) in UITableView? 【发布时间】:2021-06-06 11:04:59 【问题描述】:

我的朋友被要求为 Facebook 的 iOS 工程师角色快速实现 dequeueReusableCell(withIdentifier:)。

问题

假设您在 Apple 工作,但实现代码突然丢失。你要做的是实现 dequeueReusableCell(withIdentifier:) 的代码。 您将如何实现该功能?

class UItableView: UIScrollView 
    
    func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell? 
        
    

我的实现:

class UItableView: UIScrollView  
    let cells = [UITableViewCell]()
    
    func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell? 
        return cells.filter  $0.identifier == identifier .first
    

我不确定它有多正确。

我认为存储带有索引的单元格的字典会是更好的方法。

谁能评论一下这个函数怎么写?

【问题讨论】:

【参考方案1】:

我将创建一个字典,将identifier 与一组可用单元格相关联。当您需要一个单元格时,您可以删除并尽可能返回最后一个元素。

如果没有可用的单元格,则返回nil

popLast() 函数提供了我们需要的功能,并且复杂度为 O(1)。

一旦单元格不再可见,表格视图需要将单元格重新添加到重用数组中。

class UItableView: UIScrollView 
    let cellReusePools: [String:[UITableviewCell]] = [:] 
    
    func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell? 

        return cellReusePools[identifier]?.popLast()
    

【讨论】:

不,这个表单返回一个可选的。它是原始数据源方法,如果需要,更新、更常用的方法会创建单元格,但该表单接受索引路径并且不返回可选值。在问题中,他们使用较旧的表单使其变得更容易,因此您无需担心单元格的创建。 如果我们必须考虑 IndexPath 怎么办?字典的值会是另一个以行/节为键的嵌套字典吗? 你会如何使用 indexPath?

如何在 UITableView 中实现 dequeueReusableCell(withIdentifier:) 的代码?

】如何在UITableView中实现dequeueReusableCell(withIdentifier:)的代码?【英文标题】:howtoImplementthecodefordequeueReusableCell(withIdentifier:)inUITableView?【发布时间】:2021-06-0611:04:59【问题描述】:我的朋友被要求为Facebook的iOS工程师角色快速实现... 查看详情

如何在 UITableView 的索引列表中实现放大镜? [关闭]

】如何在UITableView的索引列表中实现放大镜?[关闭]【英文标题】:HowtoimplementamagnifyingglassintheindexlistofanUITableView?[closed]【发布时间】:2019-10-0916:42:41【问题描述】:我想在Swift中的UITableView的索引列表中实现一个放大镜。它应该... 查看详情

如何在 UITableView 中实现类似 UIImageView 的延迟加载

】如何在UITableView中实现类似UIImageView的延迟加载【英文标题】:HowtoimplementUIImageView-likedelayedloadinginUITableView【发布时间】:2009-11-0312:20:00【问题描述】:背景:我有一个UITableView在每个单元格中显示一个图像。这些图像都是大pdf... 查看详情

如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?

】如何在UITableView的RXswift和RXCocoa中实现tableview单元格的内部?【英文标题】:HowtoimplementinRXswiftandRXCocoaofUITableViewInsideoftableviewcell?【发布时间】:2018-08-2114:13:17【问题描述】:我是RXswift新手,目前正在从事一个需要rxswift和UITable... 查看详情

如何在 UITableView Cell 中实现类似于 iOS 邮件的从左向右滑动

】如何在UITableViewCell中实现类似于iOS邮件的从左向右滑动【英文标题】:HowtoImplementSwipeLefttoRightinUITableViewCellsimilartoiOSMail【发布时间】:2014-11-1608:46:48【问题描述】:我正在尝试复制Apple在其邮件应用程序中使用的相同技术,当... 查看详情

在 UITableView 中实现动态增长的 TextView

】在UITableView中实现动态增长的TextView【英文标题】:AchievingdynamicallygrowingTextViewinsideUITableView【发布时间】:2011-02-0107:29:32【问题描述】:我正在努力在UITableView中安装UITextView。我的表是分组样式,只有一个部分和一行。我已经... 查看详情

使用 scrollViewDidScroll 方法在 UITableView 中实现分页?

】使用scrollViewDidScroll方法在UITableView中实现分页?【英文标题】:ImplementingpaginationinUITableViewwithscrollViewDidScrollmethod?【发布时间】:2014-09-1714:59:06【问题描述】:我正在构建一个文章阅读应用程序。我正在使用AFNetworking第三方库... 查看详情

在 UITableView Objective-C 中实现 UISearchController

】在UITableViewObjective-C中实现UISearchController【英文标题】:ImplementUISearchControllerinUITableViewObjective-C【发布时间】:2015-09-2500:33:25【问题描述】:我正在按照本教程在我的项目中实现UISearchController:http://useyourloaf.com/blog/updating-to-the-... 查看详情

在一个 UIViewController 中实现对多个 UITableView 的 peek 和 pop

】在一个UIViewController中实现对多个UITableView的peek和pop【英文标题】:ImplementpeekandpoptomultipleUITableViewinoneUIViewController【发布时间】:2017-10-0608:29:28【问题描述】:我在一个ViewController中有两个UITableView和一个UIView,我正在尝试实现... 查看详情

如何在 Twitter iOS 7 应用程序中实现可滑动的时间线

...twitteriOS应用如何实现分页的可滑动时间线?它是简单的3UITableView嵌套在分页滚动视图中还是使用自定义视图控制器转换?我尝试了嵌套的UITableView方法,但是当您向下滚动时, 查看详情

如何在音乐播放器应用程序 ios / 中实现字母滚动条

...联网上搜索时,无法在任何地方获得该代码。我需要右侧uitableview上的滚动条我需要像这样的滚动条。【问题讨论】:你 查看详情

我在 C 中实现了双队列(双端队列)。当我调用 deque_from_back() 时程序立即退出

】我在C中实现了双队列(双端队列)。当我调用deque_from_back()时程序立即退出【英文标题】:Iimplementeddoublequeue(Deque)inC.ProgramexitsimmediatelywhenIcalldeque_from_back()【发布时间】:2021-10-3018:33:55【问题描述】:我在C中创建了双队列(deq... 查看详情

如何使用不同的委托和数据源方法在一个类中实现两个tableview?(代码片段)

...TableView,但如果有不同的参数类型怎么办?-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath[tableViewdismisWithIndexPa 查看详情

在 UITableView 中实现 Prev./Next 按钮以使第一响应者成为不可见单元格中的 UITextField

】在UITableView中实现Prev./Next按钮以使第一响应者成为不可见单元格中的UITextField【英文标题】:ImplementingPrev./NextbuttonsinUITableViewtomakefirstresponderaUITextFieldinanon-visiblecell【发布时间】:2013-04-0920:08:01【问题描述】:在我的应用程序... 查看详情

在ScrollView中实现TableView不显示表格

...View,但它从未出现过。代码在这里:@IBOutletweakvartableView:UITableView!overridefun 查看详情

如何在 laravel 中实现 vuetify?

】如何在laravel中实现vuetify?【英文标题】:Howtoimplementvuetifyinlaravel?【发布时间】:2018-07-2123:32:58【问题描述】:我是vuetify的新手,我试图在laravel中实现它。有人已经在laravel中实现了vuetify,可以告诉我怎么做吗?我已经安装... 查看详情

如何在android中实现BottomAppBar?

】如何在android中实现BottomAppBar?【英文标题】:howtoimplementBottomAppBarinandroid?【发布时间】:2020-12-2823:06:46【问题描述】:如何在android中实现BottomAppBar。build.gradleimplementation\'com.google.android.material:material:1.0.0-beta01\'activity_main 查看详情

如何在android中实现svm模型?

】如何在android中实现svm模型?【英文标题】:Howtoimplementsvmmodelinandroid?【发布时间】:2014-05-3121:47:13【问题描述】:我在Matlab中使用svmtrain训练了分类器,现在我不知道如何在android中实现模型。甚至没有一个例子来展示如何使用... 查看详情