我有一个表视图控制器,当我单击navigationBarItem中的按钮时,我会打开相同的视图控制器,但根据标志的不同,设置略有不同。通过关闭这个视图控制器,我想将值传递给前一个,并用新数据重新加载它的数据,我该如何做到这一点?授权在这里没有帮助,因为它是同一个类。
class LibraryViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
...
var isContentFromPlaylist: Bool = false
...
//I open the same VC
@IBAction func addTracksButtonPressed(_ sender: Any) {
let storyboard = UIStoryboard(name: "LibraryViewController", bundle: nil)
let vc = storyboard.instantiateViewController(identifier: "Library") as! LibraryViewController
...
navigationController?.showDetailViewController(vc, sender: nil)
}
...
@objc private func doneButtonPressed() {
...
//Here I want to change value isContentFromPlaylist to true in previous VC when this VC will close
dismiss(animated: true, completion: nil)
}
}
您可以使用这种方法。将属性添加到类
class LibraryViewController {
//...
var creator: LibraryViewController?
//...
}
然后,在控制器实例化后设置该属性。。。
@IBAction func addTracksButtonPressed(_ sender: Any) {
let storyboard = UIStoryboard(name: "LibraryViewController", bundle: nil)
let vc = storyboard.instantiateViewController(identifier: "Library") as! LibraryViewController
//...
vc.creator = self // Here it is
//...
navigationController?.showDetailViewController(vc, sender: nil)
}
并以您喜欢的方式使用:
@objc private func doneButtonPressed() {
...
//Here I want to change value isContentFromPlaylist to true in previous VC when this VC will close
creator?.isContentFromPlaylist = .........
dismiss(animated: true, completion: nil)
}
}
p.S.要重新加载数据,请使用UI线程:
DispatchQueue.main.async{
creator?.tableView.reloadData()
}