2017-02-14 13 views
0

異なるタイプの経費を含むトランザクションテーブルビューがあり、選択すると詳細が表示されます。選択時にテーブルビューのセルデータが上書きされる

ただし、このような場合には詳細が上書きされているように見えます。私はそれがフラッシュを見ることができ、時にはそれは人口になる。テキストフィールドには正しく入力されます。私はしばらくの間、これをデバッグしようとしていますが、この問題を回避する方法がわかりません。

// MARK: Tableview 
extension TransactionViewController: UITableViewDelegate, UITableViewDataSource { 
    // MARK: - Table View 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "CardCell", for: indexPath) as! CardTableViewCell 

     cell.delegate = self 

     var isDetailHidden = true 
     if indexPath.row == rowSelected { 
      isDetailHidden = false 
     } 
     let transaction = transactionList[indexPath.row] 
     cell.configureCell(transaction: transaction, isDetailHidden: isDetailHidden) 

     return cell 
    } 

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

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    if indexPath.row == rowSelected { 
     // don't refresh and set again. 
     return 
    } 

    rowSelected = indexPath.row 
    transactionBeingEdited = transactionList[indexPath.row] 

    transactionTableView.setContentOffset(CGPoint(x: 0, y: rowSelected! * 76), animated: true) 

    let cell = tableView.dequeueReusableCell(withIdentifier: "CardCell", for: indexPath) as! CardTableViewCell 

    cell.delegate = self 
    cell.configureDetailCell() 
    transactionTableView.reloadData() 
} 

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 

     let transaction = transactionList[indexPath.row] 
     coreDataManager.deleteTransaction(transaction: transaction) 
    } 

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

     if indexPath.row != rowSelected { 
      return 76.5 
     } else { 
      return 323 
     } 
    } 

詳細セクション内の変数は、ライブラリを使用してドロップダウンボックスです:

は、ここに私の現在の実装です。私はそれをUITableViewCellクラスで設定しました。ドロップダウンメソッドの設定は、awakefromnibメソッドで行われます。

private func setupBillDropDown() { 
     billDropDown.anchorView = bill 
     billDropDown.bottomOffset = CGPoint(x: 0, y: bill.bounds.height) 
     billDropDown.dataSource = TransactionType.list 

     // Action triggered on selection 
     billDropDown.selectionAction = { [unowned self] (index, item) in 
      self.bill.setTitle(item, for: .normal) 
      self.bill.setTitleColor(UIColor.white, for: .normal) 

      // Update transaction 
      if let transactionBeingEdited = self.delegate?.transactionBeingEdited { 
       transactionBeingEdited.type = item 
       self.coreDataManager.saveToCoreData() 
       self.coreDataManager.nc.post(name: .transactionBeingEdited, object: nil, userInfo: nil) 
      } 
     } 
    } 

ありがとうございます。

答えて

0

私はfunc tableView(_ tableView:UITableView、didSelectRowAt indexPath:IndexPath)では、テーブルをロードすることによって設定されたセルを上書きしていると思います。私はそれを文字通り時間を過ごした後、問題を考え出した...私からです{

if indexPath.row == rowSelected { 
    // don't refresh and set again. 
    return 
} 

rowSelected = indexPath.row 
transactionBeingEdited = transactionList[indexPath.row] 

transactionTableView.setContentOffset(CGPoint(x: 0, y: rowSelected! * 76), animated: true) 

//let cell = tableView.dequeueReusableCell(withIdentifier: "CardCell", for: indexPath) as! CardTableViewCell 

let cell = tableView.cellForRow(at: indexPath) 
cell.configureDetailCell() 
tableView.reloadRows(at: [indexPath], with: .none) 

}

+0

残念ながらそれは動作しません。詳細セクションの2つのテキストフィールドが上書きされていないので、ドロップダウンフィールドと関係があると思っています。私はコード内の別の場所にドロップダウンメソッドを移動しようとしましたが、それは問題を解決しません:( –

0

にfuncのtableView(IndexPath _のtableView:::のUITableView、didSelectRowAt indexPath)これを試してみてください

bill.titleLabel!.text = transaction.type ?? "Select Bill" 

insteaadを使用して、ボタンのタイトルを更新しました

関連する問題