2017-02-14 4 views
0

Ich habe eine Transaktion Tabellenansicht mit verschiedenen Arten von Aufwendungen, die erweitert wird, um mehr Details anzuzeigen, wenn ausgewählt.Erweitern Tabellenansicht Zellendaten werden überschrieben, wenn ausgewählt

Allerdings scheint das Detail überschrieben zu werden, wenn dies geschieht. Ich kann es blinken sehen und manchmal wird es aufgefüllt. Die Textfelder werden korrekt ausgefüllt. Ich habe versucht, dies für eine Weile zu debuggen, aber nicht sicher, wie man dieses Problem umgehen kann.

Hier ist meine aktuelle Implementierung:

// 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 
     } 
    } 

Die Variablen im Detailbereich sind Drop-Down-Box einer Bibliothek. Ich habe es in der Klasse UITableViewCell konfiguriert. Die Einrichtung der Dropdown-Methoden erfolgt in der Methode watchfromnib.

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) 
      } 
     } 
    } 

Vielen Dank im Voraus.

Antwort

0

Ich denke in Func tableView (_ TableView: UITableView, didSelectRowAt IndexPath: IndexPath) Sie überschreiben die konfigurierte Zelle durch Laden der Tabelle. Versuchen Sie diese:

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

Leider funktioniert das nicht. Ich denke, es hat mit den Dropdown-Feldern zu tun, weil die beiden Textfelder im Detailbereich nicht überschrieben werden. Ich habe versucht, die Dropdown-Methoden an verschiedene Stellen im Code zu verschieben, aber das behebt das Problem nicht :( –

0

dachte ich, das Problem, nachdem auf sie buchstäblich Stunden verbringen ... Es ist, weil ich wurde die Aktualisierung des Buttons Titel

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

insteaad von

mit
Verwandte Themen