//get section of interest i.e: first section (0)
for (var row = 0; row < tableView.numberOfRowsInSection(0); row++)
{
var indexPath = NSIndexPath(forRow: row, inSection: 0)
println("row")
println(row)
//following line of code is for invisible cells
tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: false)
//get cell for current row as my custom cell i.e :roomCell
var cell :roomCell = tableView.cellForRowAtIndexPath(indexPath) as roomCell
}
// Iterate over all the rows of a section
for (var row = 0; row < tableView.numberOfRowsInSection(section); row++) {
var cell:Cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: row, inSection: section))?
// do something with the cell here.
}
//get section of interest i.e: first section (0)
for (var row = 0; row < tableView.numberOfRowsInSection(0); row++)
{
var indexPath = NSIndexPath(forRow: row, inSection: 0)
println("row")
println(row)
//following line of code is for invisible cells
tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: false)
//get cell for current row as my custom cell i.e :roomCell
var cell :roomCell = tableView.cellForRowAtIndexPath(indexPath) as roomCell
}
8条答案
按热度按时间xoefb8l81#
您误解了表格视图的工作方式。当您想要更改单元格的配置时,您不直接修改单元格。而是更改这些单元格的数据(模型),然后告诉表格视图重新加载更改的单元格。
这是最基本的,如果你试图用另一种方式来做,它就不会正确地工作。
您说"在修改单元格之前,我需要它们的数组......"同样的道理也适用。您不应该在单元格中存储状态数据。一旦用户对单元格进行更改,您应该收集更改并将其保存到模型中。单元格可以滚动到屏幕外,并且可以随时放弃其设置。
@LordZsolt要求你展示你的代码,因为从你问的问题来看,很明显你的方式是错误的。
编辑:
如果您确信需要迭代某个部分中的单元格,则可以向表视图询问目标部分中的行数,然后可以从0循环到rows-1,使用UITableView
cellForRowAtIndexPath
方法依次向表视图询问每个单元格(这与名称相似的数据源方法不同。)该方法将为您提供当前在屏幕上可见的单元格。然后,您可以对这些单元格进行更改。请注意,这只会显示当前在屏幕上的单元格。如果目标节中有其他单元格当前不可见,则这些单元格当前不存在,并且如果用户滚动,可能会产生一些这样的细胞。因此,您需要将某种状态信息保存到模型中,以便在数据源
tableView:cellForRowAtIndexPath:
中设置目标部分的单元格时方法,您可以正确设置它们。13z8s7eq2#
对于Swift 4,我一直在使用下面的一些东西,它似乎工作得很好。
w1e3prcc3#
我使用相同的方式迭代所有的表格视图单元格,但这段代码只适用于可见的单元格,所以我只添加一行允许迭代所有的表格视图单元格,无论它们是否可见
cvxl0en24#
回答我自己的问题:* “如何迭代给定section id的所有
UITableCells
?"*:要迭代
section
部分的所有UITableCells,必须使用两个方法:tableView.numberOfRowsInSection(section)
tableView.cellForRowAtIndexPath(NSIndexPath(forRow: row, inSection: section))
所以迭代过程是这样的:
在我提问的最后,我还写了一张纸条:“* 注意:我希望以编程方式将节中所有单元格的AccessoryType设置为None *"。请注意,这是一条注解,而不是问题。
我最后是这样做的:
如果有更优雅的解决方案,请继续发布。
注意:我的表使用静态数据。
2cmtqfgy5#
雨燕4
比之前的答案更“迅速”。我确信这可以用函数式编程来完成。如果我有5分钟多的时间,我会用.reduce来代替。️
irlmq6kh6#
我使用这种方式迭代所有的表格视图单元格,但这段代码只适用于可见的单元格,所以我只添加一行允许迭代所有的表格视图单元格,无论它们是否可见
bejyjqdl7#
您可以使用UITableView的
reloadSections(_:withRowAnimation:)
方法。这将通过调用
cellForRowAtIndexPath(_:)
重新加载指定部分中的所有单元格。在该方法中,您可以对这些单元格执行任何您想要的操作。在您的情况下,您可以应用您的逻辑来设置适当的附件类型:
pkwftd7m8#
我写了一个基于Steve's answer的简单扩展,返回指定区域中给定类型的第一个单元格(如果有的话)。