- java - 如何调试(测试)GcmNetworkManager?
- java - 不能使用 LocationCallback 类
- java - 优雅地处理 SQL 空参数
- android - Gradle 同步 : Connection to the Internet denied
我正在对 tableView
是否呈现单元格进行单元测试。
我发现 tableView.cellForRow(at:)
返回 nil,而 tableView.dataSource?tableView(tableView:cellForRowAt:)
返回正确的单元格。
这是我的单元测试代码。
it("renders one option text") {
let indexPath = IndexPath(row: 0, section: 0)
let cell = sut.tableView.dataSource?.tableView(sut.tableView, cellForRowAt: indexPath)
let cell2 = sut.tableView.cellForRow(at: indexPath)
expect(cell?.textLabel?.text).toEventually(equal("A1")) // test suceeded
expect(cell2?.textLabel?.text).toEventually(equal("A1")) // test failed
}
所以我很好奇这两种方法的区别。
Apple 的文档说如果单元格不可见,tableView.cellForRow(at:)
返回 nil,所以我理解 tableView.cellForRow(at:)
单元测试时返回 nil,但我不确定 调用这两种方法的时间顺序 以及 tableView.cellForRow(at:)
获得正确值(单元格)的时间
.
最佳答案
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
此方法用于根据 tableView 的要求生成或出列单元格。这不是 UITableView 成员方法。相反,它是一个协议(protocol)方法,另一个对象(将成为数据源)将实现并返回值。因此,无论我们是在进行单元测试还是在调试应用程序,它总是会返回一个单元格。
tableView.cellForRow(at:)
此方法不是生成器方法。它是 UITableView 的成员方法,作为 eg 的实用方法。为了获取选定的行,我们使用 tableView.selectedRow。所以它应该返回任何 indexPath 的单元格。
正如我们所知,UITableView 不会创建与绘制的行相等的单元格。假设你想绘制 100 行,然后 UITableView 只创建除了可见单元格之外的几个额外单元格。因此,如果您传递任何不在可见行中的 indexPath,那么实际上该单元格不存在。因为 tableview 正在等待您滚动并重复使用未使用的单元格。因此,无论您是在进行单元测试还是在应用程序上工作,对于不可见的单元格,它始终会显示为 nil。
关于ios - tableView.cellForRow(在 :) and tableView. dataSource?tableView(tableView:cellForRowAt :) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53735018/
当我尝试运行代码时,cellForRowAtIndexPath 函数由于某种原因无法运行。 numberOfSections 函数运行良好。我认为这是 dataSource/delegate 函数或单
我对使用 cellForRowAt 执行代码的顺序有疑问 这是我的 cellForRowAt 函数 func tableView(_ tableView: UITableView, cellForRo
我需要检测 UITableViewController 中的按钮是否被点击 override func tableView(_ tableView: UITableView, cellForRowAt
我创建了两个类 NumberTableViewCell 和 YesNoTableViewCell,它们的类型均为 UITableViewCell。它们“附加”了动态原型(prototype)(如果我说
我的程序构建如下: 我有一个 UIViewController SingleEventViewController 来布局和处理事件的数据。它的元素之一是 UIView TeilnehmerTable
根据下面的代码,我第一次运行应用程序。前 3 行工作正常。但是当我上下滚动时。一些线路也会改变。当我做更多的上下它更改为其他行 我该如何解决这个问题 func tableView(_ tabl
我在 UITableViewController 中创建 TableView 时遇到问题。行数返回非零数,高度在 Storyboard 中设置。但是 cellForRowAt永远不会被调用。 这是代码
这个问题让我疯狂了 3 天。我创建了一个自定义单元类: class TransitoPalinaTableViewCell: UITableViewCell { @IBOutlet weak var
我认为我很接近,但似乎让自己感到困惑,因为我可以访问所有数据,但无法使其正常运行。 我正在尝试在表格 View 的表格中显示其各自公司(部门)下的员工列表。 我的 CoreData 在存储值和关系方面
你能帮我找到一个解决方案,而不是一次又一次地复制相同的代码吗?现在我有了这段代码 func tableView(_ tableView: UITableView, cellForRowAt i
我在使 cellForRowAt 工作时遇到问题,但不幸的是我的应用程序在编译后仍然是空白的。我正在使用 Xcode 8.3 beta 3。 import UIKit class myCell: UI
我是 swift 和 UITableView 的新手,我正在从请求中获取数据,并试图在表格 View 上显示结果。我得到的数据很好,但我的表格 View 不滚动。我知道这个问题有很多问题,但我看到其他
我试图在按下 UITabelViewCell 时获得不同的标签文本,但我无法让它工作。 completed 的默认值为 false,触摸时应为 true,然后应更改标签。在 didSelectRowA
这个问题在这里已经有了答案: How to get the indexpath.row when an element is activated? (20 个答案) 关闭 5 年前。 我想访问 ce
我有一个 ChatViewController 和聊天消息。我使用 Storyboard 约束和标识符初始化消息气泡的布局,以通过代码更改它们: func tableView(_ tableView:
我需要将表格滚动到底部。当我在 viewwilAppear 中编写滚动表格的代码时,它不起作用,但是当我在 viewDidAppear 中编写相同的代码时,它可以工作,但用户会看到滚动。我不想看到用户
我有一个问题,numberOfRowsInSection 和 cellForRowAt 函数不返回值。我需要将名称和价格从 coincap.io/front API 返回到 tableView 中。我
我正在尝试拥有 UITableView (主要)其中包含另一个 UITableView (次要)在每个单元格中。主要和次要 TableView 都有自己的数据源对象类,MajorDatasource
我是一名入门级 swift 开发人员,我正在个人应用程序中工作,但我的“tableViewController”遇到了问题。 我有一个第一个表格 View ,我从 API 中获取一些事件,然后我想做的
我有一个显示购物 list 名称的 TableView Controller 。这些购物 list 是通过购物 list 类创建的,它让我可以指定购物 list 的名称和其中的项目。此 TableVi
我是一名优秀的程序员,十分优秀!