我想在用户滚动表格 View 时访问自定义单元格中标签的 alpha 值。
我的自定义单元格类:
class HeaderTableViewCell: UITableViewCell {
@IBOutlet weak var buttonOutlet: UIButton!
@IBOutlet weak var monigerTitle: UILabel!
@IBOutlet weak var monigerSubtitle: UILabel!
func setAlpha(to alpha: CGFloat) {
buttonOutlet.alpha = alpha
monigerTitle.alpha = alpha
buttonOutlet.alpha = alpha
}
}
滚动时调用的函数:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
guard let cell = itemsTableView.dequeueReusableCell(withIdentifier: "headerCell") as? HeaderTableViewCell else {
return
}
cell.setAlpha(to: 1 - scrollView.contentOffset.y / 30)
print(cell.monigerTitle.alpha)
}
打印语句打印正确的 alpha 值,但在我启动应用程序时不会影响 Storyboard。
我试图替换:
itemsTableView.dequeueReusableCell(withIdentifier: "headerCell")
作者:
itemsTableView.cellForRow(at: IndexPath(row: 0, section: 0))
但它不会通过 guard 语句。
编辑(新尝试):
for cell in itemsTableView.visibleCells {
if let headerCell = cell as? HeaderTableViewCell {
print("success")
headerCell.setAlpha(to: 1 - scrollView.contentOffset.y / 30)
}
}
然后我尝试为所有可见单元格打印 reuseIdentifier,结果如下:
nil Optional("itemCell") Optional("itemCell") Optional("itemCell") Optional("itemCell") Optional("itemCell")
第一个是nil,但它应该是“headerCell”,它在interface builder中设置正确。
我的 tableView 包含标题单元格和项目单元格:
最佳答案
你可能需要
guard let cells = itemsTableView.visibleCells as? [HeaderTableViewCell] else { return }
cellForRowAt
在项目可见且您始终传递索引 0 时运行
编辑:
itemsTableView.visibleCells.forEach {
if let cell = $0 as? CellName1 {
}
else if let cell = $0 as? CellName2 {
}
}
关于swift - 在 ViewController 中访问自定义单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53907401/