2017-08-08 18 views
1

私はチェックマークがあるかどうかを記録するためにtableViewに配列を作成し、そこにいくつのチェックマークがあるかに基づいてLabelテキストを変更しようとしました。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]() 

チェックマークがそのように私は(パブリッククラス??)に上記のコードを書くことで考え、私の他のクラスファイルがそれにアクセスすることができます保存されました。

他のクラスファイルの先頭にもチェックマークを付ける必要がありますか?編集:それは私の悪い無効な再宣言です。助けのための

おかげ

UPDATE 2:問題は、アレイシステムの解釈にありました。私はループとしてコードを書き直しました(私は要求に応じて追加します)、それを修正しました。助けてくれてありがとう!

+1

ようになると、あなたの変数を宣言されています方法は呼ばれていますか?それはあなたがそれに新しいテキストを設定しても、ラベル上のテキストが変更されていないという問題があることはちょっと変わったようです。メソッドが呼び出されるかどうかを確認します。どちらのif文が呼び出されているのかを確認してください(どちらも可能性があります)。テキストを他の場所に設定しているかどうか確認してください。これらのすべてがOKと思われる場合、私が考えることができる唯一のことは、あなたがメインスレッドで呼び出されていないことです。メソッドが呼び出されていないか、不正確なケースが評価された場合は、投稿したコードに問題がない可能性が高いため、プロシージャに関する詳細情報を提供する必要があります。 –

+0

「チェックマーク」はどのように宣言しましたか? – Desdenova

+2

チェックマークの宣言を表示 –

答えて

1

私が理解したところでは、選択した行をテーブルビューに目盛りで表示しようとしています。その場合、表示する別の方法があります。

以下のアプローチを考慮してください。

グローバル

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

私のテーブルビューは正常に動作します。私の質問は、宣言された変数がグローバル変数として宣言されたとき、別のクラスに影響しない理由は何かを尋ねていました。私が使用したコードはあなたのものと似ていますが、私は拡張機能を使用しませんでした。 –

+0

この場合、**チェックマーク**オブジェクトの参照は何かを指しており、あなたが比較している静的** [0:false] **オブジェクトは異なります。だからこそ、あなたの状態チェックがうまくいかない理由です。 –

+0

こんにちは、私はそれをもう一度見て、それはかなりそれを修正しました。私は[int:bool]がチェックマークを印刷した後の方法を変更したループを書き直しました。私はあなたの答えを最も有用なものとして受け入れます:)) –

関連する問題