如何根据 UICollectionView 的部分以编程方式更新标签
Posted
技术标签:
【中文标题】如何根据 UICollectionView 的部分以编程方式更新标签【英文标题】:How to programmatically update a label based on the section of a UICollectionView 【发布时间】:2017-06-09 01:33:42 【问题描述】:假设我有一个水平的UICollectionView
,有 3 个部分。我希望它根据用户在滚动时所在的部分立即更新标签。我找到了一些使用scrollViewDidEndDecelerating
的解决方案,但我希望它在从第 0 节到第 1 节、从第 1 节到第 2 节等时更新。
有什么想法吗?
【问题讨论】:
【参考方案1】:有
let indexPath = tableView.indexPathForSelectedRow();
var sectionNumber = indexPath.section
并检查是否 0 显示更新第一个标签等等,但我认为最好在单元格中放置索引处的行并获取节号然后更新它的标签
还有另一种解决方案
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
//Create label and autoresize it
let headerLabel = UILabel(frame: CGRectMake(0, 0, tableView.frame.width, 2000))
headerLabel.font = UIFont(name: "Avenir-Light", size: 30)
headerLabel.text = self.tableView(self.tableView, titleForHeaderInSection: section)
headerLabel.sizeToFit()
//Adding Label to existing headerView
let headerView = UIView()
headerView.addSubview(headerLabel)
return headerView
也试试这个
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
let header = view as! UITableViewHeaderFooterView
header.textLabel?.font = UIFont(name: "Futura", size: 11)
header.textLabel?.textColor = UIColor.lightGrayColor()
【讨论】:
所以这与标题无关。我想用一个标签使问题变得简单,但实际上我有大约十几个带有图像的按钮,如果用户在正确的部分,则需要更改它们的图像。因此,如果您在第 0 部分,则按钮会从“未选择表情符号”变为“已选择表情符号”。在第 1 节中,它从“未选择的动物”变为“已选择的动物”,依此类推。 @VDog 这有点取决于您所说的用户“在正确的部分”是什么意思。多个部分通常可以同时出现在屏幕上。我个人会尝试使用collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath)
并检查索引路径的部分,但这很粗略,也许可以写一些启发式方法来分析collectionView.indexPathsForVisibleItems
的数组,看看哪个部分有多少。以上是关于如何根据 UICollectionView 的部分以编程方式更新标签的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView - 如何在同一部分显示不同高度的项目?