我有两个简单的类,它们通过代理传递信息,如下所示:
protocol VCBDelegate: class {
func buttonDidPress() }
class ViewControllerBefore: UIViewController {
weak var delegate: VCBDelegate?
let vc = ViewController()
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = vc
}
@IBAction func press(_ sender: Any) {
delegate?.buttonDidPress()
} }
class ViewController: UIViewController, VCBDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
一切正常,触发函数buttonDidPress。 但我的问题是,如果我想重新加载一个集合视图,那么集合视图是nil,因为我在ViewControllerBefore类中实例化ViewController对象的方式。 请记住,我无法在segue中分配委托,因为两个视图控制器未连接。
见下面的buttonDidPress功能:
func buttonDidPress() {
dataCell.infoCell.insert(addDataCell.getBuyCell(), at: 0)
self.cvHome.reloadData()
}
答案 0 :(得分:0)
我喜欢在这些情况下将数据存储在dataSource
内。我可以在设置完成后从应用中的任何位置访问数据。
class PageDataSource {
var theData : [Any]?
static let sharedInstance = PageDataSource()
private init() {}
}
要确保我通过delegate
传递信息并将其存储到dataSource
我这样做:
func doDelegate() {
PageDataSource.sharedInstance.theData = whatever
passData(whatever)
dismiss(true, nil)
}
然后我确保tableView
或collectionView
从PageDataSource.sharedInstance.theData
获取所需信息,例如:
// MARK: CollectionView DataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if PageDataSource.sharedInstance.theData.count >= 1 {
return PageDataSource.sharedInstance.theData.count
}
return 0
}