2016-06-21 16 views
0

私はこれにtableViewを持っている:のUITableView選択はonLoadの

Image1

をし、それは素晴らしい作品、私は、HTTPリクエストから受け取ったデータをフィルタリングするために、これを使用しています。ビューを変更して戻ったときにリセットすると、選択を保存したいと思います。私は(コードのコメントを参照してください)しようとしましたが、私はエラーがあります。 誰かが私を助けたり、私に説明する方法を教えてもらえますか?

この

は私のコードです:

// MARK: TableView 
override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return names.count 
} 

// Customize header 
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView { 
    let view: UIView = UIView(frame: CGRectMake(0, 0, tableView.frame.size.width, 18)) 
    let label: UILabel = UILabel(frame: CGRectMake(10, 5, tableView.frame.size.width, 18)) 
    label.font = UIFont.boldSystemFontOfSize(18) 
    let string: String = names[section] 
    label.text = string 
    label.textColor = .redColor() 
    label.textAlignment = NSTextAlignment.Left 
    view.addSubview(label) 
    view.backgroundColor = ColorHex().UIColorFromHex(0xEEEEEE) 
    return view 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    var number: Int! 

    switch section { 
    case 0: 
     number = 1 //reset filter 
     break 
    case 1: 
     number = statusesDict.count 
     break 
    case 2: 
     number = queuesDict.count 
     break 
    case 3: 
     number = typesDict.count 
     break 
    case 4: 
     number = severitiesDict.count 
    default: 
     break 
    } 

    return number 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 

    let cell: TicketsFilterCell! = tableView.dequeueReusableCellWithIdentifier("cellTicketFilter", forIndexPath: indexPath) as! TicketsFilterCell 

    cell.delegate = self 

    if self.selectedIndexPathArray.contains(indexPath) { 
     cell.switchFilter.setOn(true, animated: false) 
    } else { 
     cell.switchFilter.setOn(false, animated: false) 
    } 


    if(indexPath.section == 0) { 

     let text = "Resetta tutti i filtri" 

     cell.textFilter.text = text 

    } else if(indexPath.section == 1) { 

     let text = statusesDict[indexPath.row]?.capitalizedString 

     cell.textFilter.text = text 

    } else if(indexPath.section == 2) { 

     let text = queuesDict[indexPath.row]?.capitalizedString 

     cell.textFilter.text = text 

    } else if(indexPath.section == 3) { 

     let text = typesDict[indexPath.row]?.capitalizedString 

     cell.textFilter.text = text 

    } else if (indexPath.section == 4) { 

     let text = severitiesDict[indexPath.row]?.capitalizedString 

     cell.textFilter.text = text 

    } 


    return cell 

} 

//change value to true for edit tableView rows 
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 
{ 
    return false 
} 


//show selection 
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
{ 

    if let index = self.selectedIndexPathArray.indexOf(indexPath) { 
     self.selectedIndexPathArray.removeAtIndex(index) 
    } else { 
     self.selectedIndexPathArray.append(indexPath) 
    } 

    let cell = self.tableview.cellForRowAtIndexPath(indexPath) as! TicketsFilterCell 
    cell.toggleSwitch() 


} 

func switchButtonTapped(WithStatus status: Bool, ForCell cell: TicketsFilterCell) { 
    let indexPath = self.tableview .indexPathForCell(cell) 

    if (status == true) { 

     if self.selectedIndexPathArray.indexOf(indexPath!) == nil { 
      self.selectedIndexPathArray.append(indexPath!) 
     } 


     //update dictSelected 
     switch (self.tableview.indexPathForCell(cell)!.section) { 
     case 0: 
      print("section 0, reset all filter") 
      self.dictSelectedReset.updateValue(true, forKey: String((indexPath?.row)! + 1)) 
      break 
     case 1: 
      //take data from status 
      print("section 1, value -> \(statusesDict[(indexPath?.row)!]) for row \(String(indexPath!.row))") 
      self.dictSelectedStatus.updateValue(statusesDict[(indexPath?.row)!]!, forKey: String((indexPath?.row)! + 1)) 
      break 
     case 2: 
      //take data from queue 
      print("section 2, value -> \(queuesDict[(indexPath?.row)!]) for row \(String(indexPath!.row))") 
      self.dictSelectedQueue.updateValue(queuesDict[(indexPath?.row)!]!, forKey: String((indexPath?.row)! + 1)) 
      break 
     case 3: 
      //take data from type 
      print("section 3, value -> \(typesDict[(indexPath?.row)!]) for row \(String(indexPath!.row))") 
      self.dictSelectedType.updateValue(typesDict[(indexPath?.row)!]!, forKey: String((indexPath?.row)! + 1)) 
      break 
     case 4: 
      //take data from severity 
      print("section 4, value in -> \(severitiesDict[(indexPath?.row)!]) for row \(String(indexPath!.row))") 
      self.dictSelectedSeverity.updateValue(severitiesDict[(indexPath?.row)!]!, forKey: String((indexPath?.row)! + 1)) 
      break 
     default: 
      break 
     } 

    } 
    else { 

     if let index = self.selectedIndexPathArray.indexOf(indexPath!) { 
      self.selectedIndexPathArray.removeAtIndex(index) 
     } 


     //update dictSelected 
     //if exist, delete re-tapped 

     switch (self.tableview.indexPathForCell(cell)!.section) { 
     case 0: 
      if (dictSelectedReset.keys.contains(String((indexPath?.row)! + 1))) { 
       dictSelectedReset.removeValueForKey(String((indexPath?.row)! + 1)) 
      } 
      break 
     case 1: 
      if (dictSelectedStatus.keys.contains(String((indexPath?.row)! + 1))) { 
       dictSelectedStatus.removeValueForKey(String((indexPath?.row)! + 1)) 
      } 
      break 
     case 2: 
      if (dictSelectedQueue.keys.contains(String((indexPath?.row)! + 1))) { 
       dictSelectedQueue.removeValueForKey(String((indexPath?.row)! + 1)) 
      } 
      break 
     case 3: 
      if (dictSelectedType.keys.contains(String((indexPath?.row)! + 1))) { 
       dictSelectedType.removeValueForKey(String((indexPath?.row)! + 1)) 
      } 
      break 
     case 4: 
      if (dictSelectedSeverity.keys.contains(String((indexPath?.row)! + 1))) { 
       dictSelectedSeverity.removeValueForKey(String((indexPath?.row)! + 1)) 
      } 
      break 
     default: 
      break 
     } 
    } 

、これは、細胞のためのコードです:私は本当に正しい..

おかげでそれを行う方法がわからない

protocol CellProtocol : class { 
func switchButtonTapped(WithStatus status : Bool, ForCell cell : TicketsFilterCell) 
} 
class TicketsFilterCell: UITableViewCell { 

@IBOutlet var textFilter: UILabel! 
@IBOutlet weak var switchFilter: UISwitch! 

weak var delegate : CellProtocol! 

class var reuseIdentifier: String? { 
    get { 
     return "TicketsFilterCell" 
    } 
} 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 


// Uncomment here to show switches that are preselected on load 

// override func setSelected(selected: Bool, animated: Bool) { 
//  super.setSelected(selected, animated: animated) 
//  self.delegate .switchButtonTapped(WithStatus: selected, ForCell: self) 
// } 



@IBAction func switchTapped(sender: UISwitch) { 

    self.delegate.switchButtonTapped(WithStatus: sender.on, ForCell: self) 

} 

// select UISwitch and change status 
func toggleSwitch() { 
    if self.switchFilter.on { 
     self.switchFilter .setOn(false, animated: true) 
    } else { 
     self.switchFilter .setOn(true, animated: true) 
    } 
    self.delegate.switchButtonTapped(WithStatus: self.switchFilter.on, ForCell: self) 
} 

} 

前進。

+0

問題は明らかではありません。ビューがアクティブなときに、配列を保存して同じ配列からデータをロードしようとしましたか? –

+0

@UmarFarooqueもしあなたがその方法で試したセルコードを見ても、私はエラーがない、私は値の配列を保存しなければならないと思いますが、ロード時に値を再設定する方法がわかりません。 ? – Jigen

答えて

0

あなたのアプローチは次のようにする必要があります。

  1. 配列を取り、この配列は[boolArr]つまりあなたのboolean型のボタンの状態が含まれている必要があり

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int)

で使用されるあなたのnumber変数の数に等しい[boolArrを言います]。オンまたはオフの場合。

  1. viewwilldisappearが呼び出されたときにこの[boolArr]を保存します。

  2. ビュー内の同じ配列[boolArr]からデータをロードし、さらにcellForRowAtIndexPathで使用します。

  3. cellForRowAtIndexPathにデータをロードするときに、必要なチェックとnilと空を追加します。

関連する問題