解除B视图时未调用UITableView函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解除B视图时未调用UITableView函数相关的知识,希望对你有一定的参考价值。
当我用view B
解雇self.dismiss(animated: true, completion: nil)
时,没有叫view A
的numberOfRowsInSection
和cellForRowAt
,viewDidLoad
也没有。
这是我的代码,我是UITableView
的新手,所以请原谅任何愚蠢的错误。
class WalletTableViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var addCryptoButton: UIButton!
var cryptosArray: [Cryptos] = []
override func viewDidLoad() {
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.none
tableView.delegate = self
loadCryptoArray()
print("viewDidLoad")
}
override func viewWillAppear(_ animated: Bool) {
tableView.delegate = self
loadCryptoArray()
print("viewWillAppear")
}
func loadCryptoArray() {
print("loadCryptoArray")
if UserDefaults.standard.object(forKey: "cryptosArray") != nil {
if let decoded = UserDefaults.standard.object(forKey: "cryptosArray") as? Data? {
let decodedCryptoArray = NSKeyedUnarchiver.unarchiveObject(with: decoded!) as! [Cryptos]
cryptosArray = decodedCryptoArray
}
} else {
print("UserDefaults KO")
}
}
@IBAction func addCryptoButtonTapped(_ sender: Any) {
let cryptoPickerViewController = self.storyboard?.instantiateViewController(withIdentifier: "cryptoPickerViewController")
self.present(cryptoPickerViewController!, animated: true)
}
@IBAction func segmentedControlTapped(_ sender: Any) {
switch segmentedControl.selectedSegmentIndex
{
case 0:
self.dismiss(animated: true, completion: nil)
case 1:
self.dismiss(animated: true, completion: nil)
default:
break
}
}
}
//-----------------------------
extension WalletTableViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cryptosArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let crypto = cryptosArray[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! WalletTableViewCell
cell.setCrypto(crypto: crypto)
cell.delegate = self
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 85
}
}
viewDidLoad
在viewController
的生命周期中被召唤一次。因此,假设A
呈现B
,那么当B
被解雇时,没有理由再次调用viewDidLoad
,因为A
已经从之前加载并且只是在屏幕上显示。
要从呈现的B
回来时重新加载表,只需将其添加到A
:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
}
只要viewWillAppear
出现在屏幕上,就会调用viewController
回调。当从B
回来时就是这种情况 - A
被隐藏了,现在又重新出现了。在docs中阅读更多内容,特别是处理与视图相关的通知部分:
使用像
viewWillAppear(_:)
这样的方法来准备你的视图出现在屏幕上......
以上是关于解除B视图时未调用UITableView函数的主要内容,如果未能解决你的问题,请参考以下文章
在 UI 自动化测试中解除警报时未调用 UIAlertView 的委托方法“clickedButtonAtIndex”
使用 UITableView 时未调用 switch 语句案例
添加为另一个视图的子视图时未调用 touchesBegan 方法
UITableviewcontroller 中的 UITableview - 重新加载时未调用 cellforrowatindexpath