是的,可以使用代理模式来实现在不进行segue的情况下从MasterViewController加载数据。
首先,创建一个协议文件(如DetailViewControllerDelegate.swift),定义一个协议并声明一个方法用于从MasterViewController加载数据:
protocol DetailViewControllerDelegate: AnyObject {
func loadDataFromMaster()
}
然后,在DetailViewController中声明一个代理属性,并在需要加载数据的地方调用代理方法:
class DetailViewController: UIViewController {
weak var delegate: DetailViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
// 加载数据
delegate?.loadDataFromMaster()
}
// ...
}
接下来,在MasterViewController中实现DetailViewControllerDelegate协议,并设置DetailViewController的代理为自身:
class MasterViewController: UIViewController, DetailViewControllerDelegate {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let detailViewController = segue.destination as? DetailViewController {
detailViewController.delegate = self
}
}
// 实现协议方法,加载数据
func loadDataFromMaster() {
// 在这里加载数据
}
// ...
}
这样,当DetailViewController被加载时,它会调用代理方法loadDataFromMaster(),然后MasterViewController实现该方法来加载数据,从而实现在不进行segue的情况下从MasterViewController加载数据。