在具有一堆静态单元格的表格视图中设置所有标签的文本颜色

问题描述 投票:0回答:5

我有一个设置屏幕,它是一个 UITableViewController,包含大约 20 个静态(!)单元格(4 组,每组 5 个单元格)。每个静态单元格都包含一个标签。

有没有一种方法可以设置所有标签的文本颜色,而无需为每个标签创建出口并单独设置其文本颜色?

swift uitableview static uilabel cell
5个回答
2
投票

还有另一种方法可以做到这一点。这保证您可以访问单元格视图层次结构中的所有标签,无论它们处于哪个级别:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    recursiveSetTextColorForLabelsInView(cell)
}

func recursiveSetTextColorForLabelsInView(inView: UIView) {
    for view in inView.subviews {
        if let subview = view as? UILabel {
            subview.textColor = UIColor.redColor()
        }
        else {
            self.recursiveSetTextColorForLabelsInView(view)
        }
    }
}

1
投票

或者实现

-tableView:cellForRowAtIndexPath:
,只是不要调用
dequeueReusableCellWithIdentifier:
,因为这在静态 tableView 单元格上不起作用。请致电
super.cellForRowAtIndexPath:

然后您可以通过

cell.textLabel
访问标签,或者如果自定义单元格:
cell.contentView.subviews.first as? UILabel


0
投票

我建议对 UILabel 进行子类化,并在子类中设置文本颜色。在布局中,将 UILabels 的类更改为您的子类。作为奖励,将其设置为 IBDesignable,这样您就可以在故事板中看到您的自定义内容。

import UIKit

@IBDesignable
class CustomLabel: UILabel {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        customize()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    override func prepareForInterfaceBuilder() {
        customize()
    }

    private func customize() {
        textColor = UIColor.redColor()
    }

}


0
投票

我是这样做的:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    let view = cell.contentView.subviews.first
    if let viewToTest = view as? UILabel
    {
        viewToTest.textColor = UIColor.redColor()
    }
}

实际上,在我的例子中,单元格中的标签和其他控件位于 UIStackView 中,因此要访问我使用的标签视图:

let view = cell.contentView.subviews.first?.subviews.first

而不是:

let view = cell.contentView.subviews.first

因为在这种情况下,我的标签在单元格中再上一层。


0
投票

就我而言,我想根据开关是否打开或关闭来更改整个部分的 Alpha 和 userInteraction。来自 https://stackoverflow.com/a/36097181/14414215https://stackoverflow.com/a/36100831/14414215 的答案有助于引导此功能的正确方向。

 func updateCellAlpha() {
    let section = 1
    let numberOfRows = self.tableView.numberOfRows(inSection: section)
    
    for row in 0..<numberOfRows {
      if let cell = self.tableView.cellForRow(at: IndexPath(row: row, section: section)) {
        for subview in cell.contentView.subviews {
          subview.alpha = syncToSwitch.isOn ? 1.0 : 0.5
          subview.isUserInteractionEnabled = syncToSwitch.isOn ? true : false
        }
      }
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.