Swift中的回调– TableView和CollectionView的实际示例

您非常喜欢某件东西,因此您始终希望围绕它。

所有程序员都沉迷于某种东西,如果您是iOS开发者,那么当您被介绍到UITableView和/或UICollectionView ,您将UICollectionView 。 当您使用UIScrollView危险时,您会更加爱他们(我是说😢)。 我已经看到程序员非常喜欢某些数据结构(即enumstruct ),以至于他们只能思考。 这种爱带来了一些在别的事情的帮助下做某事的非常酷的技巧。 因此,在开始快速讨论之前让我更新前面提到的报价,

您非常喜欢UITableView和/或UICollectionView ,以至于即使是简单的输入FORM看起来也UICollectionView

请参阅此非常简单的表单以获取用户输入。 它具有一些文本字段和一些标题标签。 可以使用UIScrollView在本地UIViewController轻松设计和维护(适用于较小的屏幕)。

但是,如果您喜欢TableView,那么您会发现它也可以很容易地实现。 我认为它具有一些明显的优势 。 但是让我们看看这怎么可能是一个实施问题。

表单的设计和表示形式与自定义单元格类完全没有问题但是问题是如何将数据从custom cell对象传输到TableViewController对象。 我将通过图表显示。

现在,可以通过多种方式将输入文本返回给Parent ViewController 。 我们可以使用protocol声明, Notification userInfo等来实现。但是今天,我将讨论一种通过回调函数完成此操作的巧妙方法。

现在,在各种平台和语言中以各种方式定义了回调。 简单地说,回调会将某些内容返回给调用方。 它可以返回值,引用,函数或返回自身。

好的好的。 我说话太多了。 让我们看一些代码。

假设这是一个自定义UITableViewCell

由名为UserControllerUITableViewController实例化。 我们可以在控制器中UITableViewDataSource cellForRowAtIndexPath方法中执行此操作。

 让cell = tableView.dequeueReusableCell(withIdentifier:“ singleTfCell”,for:indexPath)为!  SingleTfTableViewCell 
  cell.staticLbl.text =“公司” 
cell.inputTf.text = company ///如果表单处于编辑用户信息模式
返回单元

我们知道。 来吧,已经显示了回调!!

是的,我要去。 因此,如果我们想将输入textField的值保存到UserController声明的名为company的变量中,则需要将textFiledDidEndEditing点的输入值从SingleTfTableViewCell对象textFiledDidEndEditingUserController (请记住,我将其称为对象,而不是类)。 这就是我使用回调的方式。

cellForRowAtIndexPath方法中,我做了类似的事情。

 让cell = tableView.dequeueReusableCell(withIdentifier:“ singleTfCell”,for:indexPath)为!  SingleTfTableViewCell 
  cell.staticLbl.text =“公司” 
cell.inputTf.text = company ///如果表单处于编辑用户信息模式
  //从回调返回值 
cell.returnValue = {
self.company =价值
}
返回单元

容易吧?

那么,它是否可用于具有相同customCellClass多个单元格? 是的,它确实。 效率很高。 我们可以在各自的范围内定义所有回调返回closures 。 像这样:

了解如何分配相同类别的不同对象来设置不同的变量。 ✌

UICollectionViewUITableView.一样,这里的所有内容都适用UITableView.