2017-08-08 81 views
1

我已經在tableView中創建了一個數組來記錄有多少個單元格有複選標記,並且試圖根據有多少複選標記來更改標籤文本。UILabel不改變文本

我的代碼:

@IBOutlet weak var myLabel: UILabel! 
func setText() { 

    if checkmarks == [0: false] { 
    self.myLabel.text = "text" 
    } 
    if checkmarks == [1: false] { 
    self.myLabel.text = "text1" 
    } 
} 

我沒有得到任何錯誤,但文本沒有改變。任何建議表示讚賞。

更新:我想從另一個類中獲取值的數組。

這裏是代碼:

var checkmarks = [Int: Bool]() 

複選標記得到保存,所以我想通過寫在(公共類?)上面的代碼,我的其他類文件可以訪問它。

也許我需要在另一個類文件的開頭調用複選標記?編輯:這是一個無效的重新宣言我的壞。

感謝您的幫助

更新2:問題是在陣列系統的解釋。我將我的代碼重寫爲一個循環(我將根據請求添加)並修復它。謝謝大家的幫助!

+1

是該方法被調用?這似乎有點奇怪,問題在於標籤上的文本沒有被改變,儘管你設置了新的文本。檢查方法是否被調用。檢查哪些if語句被調用(可能都是)。檢查你是否在其他地方設置文本。如果所有這些看起來都不錯,那麼我唯一能想到的就是你不會在主線程中調用它。如果方法沒有被調用,或者評估了不正確的情況,那麼您需要提供有關您的過程的更多信息,因爲問題很可能不在您發佈的代碼中。 –

+0

你是如何申明'checkmarks'的? – Desdenova

+2

顯示覆選標記聲明 –

回答

1

就我的理解而言,您正嘗試在tableview中顯示帶勾號的選定行,因此如果它有另一種方法來顯示它。

考慮以下方法。

聲明變量作爲全球上課

var selected = [String]() 
let colors = ["Apple","Pear", "Banana","Orange",] 

和您的數據源和委託方法想類似這樣

extension ViewController: UITableViewDataSource, UITableViewDelegate { 
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
      let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
      cell.selectionStyle = .none 
      if selected.contains(colors[indexPath.row]) { 
       cell.accessoryType = .checkmark 
      }else{ 
       cell.accessoryType = .none 
      } 
      cell.textLabel?.text = colors[indexPath.row] 
      return cell; 
     } 

     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
      return colors.count 
     } 

     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
      if selected.contains(colors[indexPath.row]) { 
       selected.remove(at: selected.index(of: colors[indexPath.row])!) 
      }else{ 
       selected.append(colors[indexPath.row]) 
      } 
      tableView.reloadData() 
     } 
} 

,最後你的輸出會是這樣 enter image description here

+0

我的tableview工作正常。我的問題是,當我聲明它爲全局變量時,我的聲明變量不影響另一個類的原因是什麼?我使用的代碼與您的代碼類似,但我沒有使用擴展名。 –

+0

如果是這種情況,那麼** checkmarks **對象的引用指向某個東西,並且您正在比較的靜態** [0:false] **對象是不同的。所以這就是你的狀態檢查不起作用的原因。 –

+0

嗨,我再次研究它,並修復它。我重寫了一個循環,改變了[int:bool]在打印我的複選標記後的方式,我將接受你的答案作爲最佳答案,因爲它是最有用的:)) –