2016-08-24 14 views
2

Webサービスからデータを取得するときに、UILabel属性(背景色、背景形状など)を動的に更新または変更したいと考えています。iOS SwiftカスタムUITableViewCellでUILabel属性を変更または更新する方法

このラベルを異なるLableテキストで差し替えたい、Webサーバーから取得したtestdataに従ってUILabel属性を更新します。 testdata = [1,1,1,1]の場合、UIlabelの背景色は赤です。testdata = [2,2,2,2] UILabelの背景色は青です。

私は次のことを行っています。 :Main.Stroyboardで

私はUITableViewCellTVcellという名前とUILabelコンポーネントを追加関連するテーブルビューとTableViewCell(選択肢カスタム)を追加します。

TVcellで

import UIKit 
class TVCell: UITableViewCell { 

    @IBOutlet weak var testLabel: UILabel! 

    var testdata:TestDataInfo?{ 
     didSet{ 
      updateUI() 
     } 
    } 

    private func updateUI(){ 
     if let mFildata=testdata{ 
      setStautesLabel() 
     } 
    } 

    private func setStautesLabel(){ 
     self.testLabel=UILabel(frame: CGRect(x: 50, y: 50, width: 100, height: 35)) 
     self.testLabel.text = "thisTestLabel" 

     self.testLabel.transform = CGAffineTransformMakeRotation(0.2) 
     self.superview?.addSubview(self.testLabel) 
    } 
} 

Methodeの1:TableViewController

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let data = TestDataInfo![indexPath.row] 
    let cell = self.TV.dequeueReusableCellWithIdentifier(Storyboard.ProjectAppliedCellIndentifier,forIndexPath: indexPath) 
    if let filesDataCell = cell as? TVCell{ 
     filesDataCell.testdata=data 
    } 
    return cell 
} 

結果1

でジャスト・ワン・セルtestLabelには表示testLabel変更し、残りの細胞なかったです

Methodeの2:TableViewController

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let data = TestDataInfo![indexPath.row] 
    let cell = self.TV.dequeueReusableCellWithIdentifier(Storyboard.ProjectAppliedCellIndentifier,forIndexPath: indexPath) 
    if let filesDataCell = cell as? TVCell{ 
     filesDataCell.testdata=data 
     // update testLable In there 
     let testLable:UILabel=UILabel(frame: CGRect(x: 50, y: 50, width: 100, height: 35)) 
     testLable.text = "thisLabel" 
     testLable.transform = CGAffineTransformMakeRotation(0.2) 
     cell.contentView.addSubview(testLable) 
    } 
    return cell 
} 

結果2

のすべてのセルにTestUILabelを表示することができます。 testLabelオリジナルを更新するだけで新しいUILabelを追加するだけです

なぜですか?私はTVCellのすべてのUILableを更新したいと思います。誰でも助けてくれますか?

+0

updateUI meants異なるLableテキストで異なるタイプで表示したいのですが、私はWebサーバーから取得したtestdataに従ってUILabel属性を更新したいと書いています。 testdata = 1の場合、UIlabelの背景色は赤ですが、testdata = 2 UILabelの背景色は青です。 – RonnieLee

答えて

1

TableViewControllerでtestLabelの新しいインスタンスを作成しないでください。あなたはfilesDataCell.testLabelによってTableViewControllerに直接アクセスできます。セルが再利用されるため、新しいラベルを追加すると、以前のラベルを破棄せずに新しいラベルを追加し続けることになります。

+0

okですが、TVcell(TaleviewCellクラス) – RonnieLee

+0

@sachで更新するメソッドはありません。以前のラベルを破棄せずに新しいラベルを追加することができます。 "、UITableVIewでモデルのデータに基づいて動的にラベルを作成する最適な解決策は何ですか? –

関連する問題