2017-05-09 3 views
0

のすべてのスイッチの選択を解除すると、異なる質問タイプのさまざまなxibファイルで構成されるテーブルビューが表示されます。そのような質問の1つは、複数のオプションの回答です。この行タイプでは、行自体が別のテーブルビューで構成され、各行にはラベルがあり、この質問のオプション数と、この内部テーブルの上にある全体的なスイッチがこの質問をnaとマークします。このnaスイッチをタップすると、内側の行にあるすべてのスイッチの選択を解除する必要があります。私は、次のことを試してみましたが、内側のテーブルでないすべてのセルが画面に表示されるオプションは非常に多く存在する場合、私は問題を持っている:テーブルビュー

@IBAction func switchChange(_ sender: UISwitch) { 

     let mcAnswerTable = sender.superview?.superview?.superview?.superview as! UITableView 

      for rows in mcAnswerTable.visibleCells { 

       if condition { 
        if let row = rows as? MCAnswerCell { 
         row.enabled.setOn(false, animated: true) 
        } 
       } 

      } 
     } 

答えて

2

は基本的にしない限り、直接ビュー(セル)を操作することを避けるにはあなたは選択肢がありません。

ここに1つあります。適切なモデルをに作成し、コントローラを使用して変更します。スイッチを含むテーブルビューの


  • データソースモデルとしてisSelectedプロパティで(のはFooそれを呼びましょう)カスタムクラスを使用します。
  • cellForRowでスイッチのisOnプロパティをisSelectedの状態に設定します。
  • テーブルビューセルをサブクラス化し、スイッチにFooIBActionのプロパティを追加します。
  • cellForRowFooインスタンスをカスタムセルに渡してIBActionisSelectedプロパティを更新できるようにします。参照セマンティクスのために、変更はデータソースに残されます。スイッチの選択を解除するには
  • は、もう一つの大きな利点は、あなたも、現在表示されていない細胞のすべてのスイッチの状態へのアクセス権を持っているということですtableView.reloadData()

dataSourceArray.forEach {$0.isSelected = false}ウントを呼び出します。

+0

ここで尋ねられるqに答えて、セルフォローのスイッチを扱うための新しい質問が追加されました。 http://stackoverflow.com/questions/43876065/setting-switches-on-off-for-rows-in-an-inner-table-within-a-row-in-an-outer-t – user2363025

関連する問題