2017-05-09 28 views
0

有一個表視圖,它由用於不同問題類型的各種不同的xib文件組成。一個這樣的問題是多選項答案。對於此行類型,行本身由另一個tableview組成,每行都有一個標籤,併爲該問題提供多個選項切換,並在該內部表上方整體切換以將此問題標記爲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

基本上避免操縱視圖(細胞)直接除非你沒有選擇。

這裏有一個。創建一個合適的型號並使用控制器進行更改。


  • 對於包含交換機的表格視圖中使用的自定義類(讓我們稱之爲Foo)與isSelected屬性作爲數據源模型。
  • cellForRow將交換機的isOn屬性設置爲isSelected的狀態。
  • 對錶格視圖單元劃分子類併爲交換機添加FooIBAction的屬性。
  • cellForRowFoo實例傳遞給自定義單元格,以便能夠更新IBAction中的isSelected屬性。由於引用語義的原因,這些更改會保留在數據源中。
  • 要取消選擇開關調用dataSourceArray.forEach {$0.isSelected = false} UND tableView.reloadData()

另一個巨大的好處是,你必須進入狀態的所有開關,即使其不可見目前的細胞。

+0

我在處理cellforrow中的開關時添加了一個新問題,因爲您在這裏回答問題。 http://stackoverflow.com/questions/43876065/setting-switches-on-off-for-rows-in-an-inner-table-within-a-row-in-an-outer-t – user2363025

相關問題