如果上一个视图控制器是Swift类,如何将数据传递给它



我有一个表视图控制器,当我单击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()
}

最新更新