2016-03-19 7 views
2

UITableViewControllerであり、20個のスタティック(!)セル(4つのグループ、各グループに5つのセル)を含む設定画面があります。すべての静的セルにラベルが含まれています。静的セルの束を持つテーブルビュー内のすべてのラベルのテキスト色を設定します。

ラベルごとにコンセントを作成せずにテキストの色を個別に設定せずに、すべてのラベルのテキストの色を設定する方法はありますか?

+0

グループ化されたスタティックセルですか? –

答えて

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() 
    } 

} 

Xcode

+0

ありがとうございます。それは悪くないですが、各ラベルにアウトレットを割り当てて、 '-tableView:cellForRowAtIndexPath:'または ' - tableView:willDisplayCell:forRowAtIndexPath:'に設定するのと似ています。 – hkdalex

1

またそれは、静的のtableView細胞上では動作しませんとだけdequeueReusableCellWithIdentifier:を呼び出すことはありません、-tableView:cellForRowAtIndexPath:を実装します。代わりにsuper.cellForRowAtIndexPath:に電話してください。

その後、カスタムセルcell.textLabelを介して、または場合はラベルにアクセスすることができます。ここではcell.contentView.subviews.first as? UILabel

+0

ありがとうございます、これはうまくいくようですが、私は最終的に ' - tableView:willDisplayCell:forRowAtIndexPath:'でラベルにアクセスして別の方法に行きました。質問に対する自分の答えを見てください。 – hkdalex

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 

この場合、私のラベルはセル内でさらに1レベル上にあるためです。

0

これを行うもう1つの方法があります。これは、セルのビュー階層内のすべてのラベルにアクセスすることを保証します。どのレベルでも問題はありません。

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) 
     } 
    } 
} 
関連する問題