代表:传递没有segue的数据

时间:2018-02-25 18:40:12

标签: ios swift

我有两个简单的类,它们通过代理传递信息,如下所示:

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()
}

1 个答案:

答案 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)
}

然后我确保tableViewcollectionViewPageDataSource.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
    }