听闻少年二字,当与平庸相斥。这篇文章主要讲述从`ViewWillAppear`触发`TableViewCell`函数相关的知识,希望能为你提供帮助。
我想从func updateCellValueLabel(...)
触发ViewWillAppear
,所以当我打开视图时,我的数据是最新的。
我可能正在过度思考这种情况,因为TableViewCell:
参数让我可以访问indexPath
,但我无法弄清楚如何调用它。
【从`ViewWillAppear`触发`TableViewCell`函数】查看控制器:
class WalletTableViewController: UIViewController, UITextFieldDelegate {override func viewDidLoad() {
super.viewDidLoad()registerForKeyboardNotifications()
self.hideKeyboard()self.tableView.separatorStyle = UITableViewCellSeparatorStyle.none
tableView.delegate = self
tableView.dataSource = selfif CDHandler.fetchObject() != nil {
cryptos = CDHandler.fetchObject()!
tableView.reloadData()
}erc20AddressTextField.delegate = selfWalletTableViewCell.init().updateCellValue()
}override func viewWillAppear(_ animated: Bool) {tableView.delegate = self
tableView.dataSource = selfif CDHandler.fetchObject() != nil {
cryptos = CDHandler.fetchObject()!
tableView.reloadData()
}WalletTableViewCell.init().updateCellValue()}
}
我的表格视图扩展名:
extension WalletTableViewController: UITableViewDelegate, UITableViewDataSource, CryptoCellDelegate {func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) ->
Int {
return cryptos.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->
UITableViewCell {let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! WalletTableViewCellcell.cryptoNameLabel.text = cryptos[indexPath.row].name
cell.cryptoCodeLabel.text = cryptos[indexPath.row].symbol
cell.amountLabel.text = cryptos[indexPath.row].amount
cell.amountTextField.placeholder = cryptos[indexPath.row].placeholdercell.delegate = self
cell.amountTextField.delegate = selfreturn cell
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
/*if editingStyle == .delete {
cryptos.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
CDHandler.deleteObject(crypto: cryptos[indexPath.row])
}*/
if editingStyle == .delete {
let selectedManagedObject = cryptos[indexPath.row]
CDHandler.deleteObject(entity:"CryptosMO", deleteObject: selectedManagedObject)
cryptos.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
}
}// Value calculation &
label update
//----------------------------------
func updateCellValueLabel(_ walletTableViewCell: WalletTableViewCell) {print("CALLED") // <
--- This is never printedif walletTableViewCell.amountLabel.text == "" {
walletTableViewCell.amountLabel.text = "0.00000000"
}var newCryptos : [CryptosMO] = []
var doubleAmount = 0.0
var cryptoPrice = ""
let indexPath = tableView.indexPath(for: walletTableViewCell)if CDHandler.fetchObject() != nil {
newCryptos = CDHandler.fetchObject()!
tableView.reloadData()
}cryptoPrice = cryptos[(indexPath?.row)!].code!
guard let cryptoDoublePrice = CryptoInfo.cryptoPriceDic[cryptoPrice] else { return }let selectedAmount = newCryptos[(indexPath?.row)!]
if let amount = selectedAmount.amount {
doubleAmount = Double(amount)!
}amountValue = https://www.songbingjia.com/android/cryptoDoublePrice * doubleAmountif WalletViewController.currencyCode !="" {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "(WalletViewController.currencyCode)")
walletTableViewCell.cryptoValueLabel.text = formatter.string(from: NSNumber(value: amountValue))
}
}}
表格视图单元格:
protocol CryptoCellDelegate {func cellAmountEntered(_ walletTableViewCell: WalletTableViewCell)
func updateCellValueLabel(_ walletTableViewCell: WalletTableViewCell)
}
class WalletTableViewCell:UITableViewCell {
func updateCellValue() {
delegate?.updateCellValueLabel(self)
}@IBAction func amountTextFieldEntered(_ sender: Any) {
delegate?.cellAmountEntered(self)
delegate?.updateCellValueLabel(self)
}
}
每当我想刷新数据时,如何调用
updateCellValueLabel(...)
?答案func updateCellValueLabel(_ walletTableViewCell:WalletTableViewCell)将WalletTableViewCell作为参数,因此如果不将参数传递给单元格,则无法调用它。因此,如果要在viewDidAppear上调用它,则必须循环tableview并调用它对于每个单元格,所以在视图viewDidAppear中你应该写类似的东西..
for i in 0...self.tableview.numberOfSections - 1{
self.updateCellValueLabel(_ walletTableViewCell: self.tableview.cellForRow(at: i))
}
之后如果你想多次调用它,你可以将它添加到一个函数中并调用该函数
推荐阅读
- [AppDelegate managedObjectContext](发送到实例的无法识别的选择器)
- Android iframe错误
- 如何在Android上使用HTML5应用启用全屏YouTube视频()
- 下载完成后如何显示app选择器
- 用户按下后退按钮后检查互联网连接。(Android的警报框)
- 如何拍照,保存并在Android中获取照片
- 为什么Grails(在Tomcat中)记录到catalina.out和我的自定义文件appender()
- 使用Google Apps脚本删除Google表格中的行
- 仅在Google Apps脚本中是新文件时才解压缩文件