我有一个设置屏幕,它是一个UITableViewController,包含20个静态(!)单元格(4组,每组5个单元格)。每个静态单元格都包含一个标签。
有没有办法设置所有标签的文字颜色而不为每个标签创建一个插座并单独设置其文字颜色?
答案 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()
}
}
答案 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
因为在这种情况下,我的标签在单元格中更进一步。