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

时间:2016-03-19 00:22:56

标签: swift uitableview static uilabel cell

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

有没有办法设置所有标签的文字颜色而不为每个标签创建一个插座并单独设置其文字颜色?

4 个答案:

答案 0 :(得分: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 :(得分:1)

或者实现-tableView:cellForRowAtIndexPath:,只是不要调用dequeueReusableCellWithIdentifier:,因为这对静态tableView单元格不起作用。请改为呼叫super.cellForRowAtIndexPath:

然后,您可以通过cell.textLabel或自定义单元格cell.contentView.subviews.first as? UILabel

访问标签

答案 2 :(得分:0)

我建议继承UILabel,并在子类中设置文本颜色。在您的布局中,将UILabel的类更改为您的子类。作为奖励,请将其设为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()
    }

}

Xcode

答案 3 :(得分: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

因为在这种情况下,我的标签在单元格中更进一步。