在ViewController中访问自定义单元格

时间:2018-12-23 21:49:56

标签: swift uitableview

当用户滚动表格视图时,我想访问自定义单元格中标签的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)
}

print语句可打印正确的Alpha值,但在启动应用程序时不会影响情节提要。

我试图替换:

itemsTableView.dequeueReusableCell(withIdentifier: "headerCell")

作者:

itemsTableView.cellForRow(at: IndexPath(row: 0, section: 0))

但是它不会通过保护声明。

编辑(新尝试):

for cell in itemsTableView.visibleCells {
    if let headerCell = cell as? HeaderTableViewCell {
        print("success")
        headerCell.setAlpha(to: 1 - scrollView.contentOffset.y / 30)
    }
}

然后我尝试为所有可见的单元格打印reuseIdentifier,这就是结果:

  

nil可选(“ itemCell”)可选(“ itemCell”)可选(“ itemCell”)   Optional(“ itemCell”)Optional(“ itemCell”)

第一个为nil,但应为“ headerCell”,在接口构建器中正确设置。

我的tableView带有标题单元格和项目单元格:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

您可能需要

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 { 
    }
}