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.
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 :( –