2016-08-24 62 views
2

我想從Web服務獲取數據時動態更新/更改UILabel屬性(背景顏色,背景形狀等)。iOS Swift如何更改或更新自定義UITableViewCell中的UILabel屬性

我想通過不同的Lable文本顯示不同類型的Label,根據從Web服務器獲得的測試數據更新UILabel屬性。像這樣:if get testdata = [1,1,1,1] UIlabel背景色爲紅色,testdata = [2,2,2,2] UILabel背景色爲藍色等。

我在做以下:

在Main.Stroyboard:

我想補充的TableView和相關TableViewCell(選擇自定義)UITableViewCell命名TVcell並添加一個UILabel組件。

在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我想通過不同的標籤文本顯示差異類型,我寫了我想要更新UILabel屬性根據從Web服務器獲得的testdata。像那樣:if get testdata = 1 UIlabel背景顏色是紅色的,testdata = 2 UILabel背景顏色是blue.etc – RonnieLee

回答

1

不要在TableViewController中創建testLabel的新實例。你可以通過filesDataCell.testLabel在TableViewController中直接訪問它;由於單元格被重用,添加新標籤將繼續添加新標籤,而不會丟棄以前的標籤。

+0

ok,但有任何方法更新它在TVcell(TaleviewCell類) – RonnieLee

+0

@sach中,「添加新標籤將保持在不丟棄以前的標籤的情況下添加新的標籤「。什麼是動態創建標籤或基於UITableVIew中的模型數據計數的最佳解決方案? –