swift - 在 ViewController 中访问自定义单元格

标签 swift uitableview

我想在用户滚动表格 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 包含标题单元格和项目单元格:

enter image description here enter image description here

最佳答案

你可能需要

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/

相关文章:

ios - 如何在 NavigationController 之后的 TabBar 连接的 ViewController 中显示 navigationItem.title

ios - SwiftUI:如何在容器 View 中垂直和水平居中并在其下放置一些东西

swift - 标签更改时调用 viewDidLayoutSubviews (xcode) (swift)

ios - 如何在 swift 中将 CMSampleBuffer 转换为 CMAttachmentBearer

ios - swift 4 错误 : '-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread

ios - 当用户向下滑动两次触摸时如何防止 UITableView 中的 ScrollView ?

ios - 当你调用 UItableview reload 两次时会发生什么

swift - 自定义 UITableViewCell 按钮调用不正确的目标

ios - 未调用 scrollViewDidEndScrollingAnimation

ios - UItableview分隔线的高度