将标题中的数据检索到父级视图

时间:2017-05-29 23:57:21

标签: ios swift3 delegates swift-protocols

我有一个自定义UICollectionViewController,其中包含自定义标题和单元格。

我已经实现了一个协议,其中collectionView响应,所以通过这种方式,我知道在collectionView中当一个对象被访问时(例如按下按钮),到目前为止这么好。

我想要做的是当我点按一个按钮时,在collectionView中,我需要标题来检索它拥有的collectionView

的一些数据

假设我点击collectionView中的保存按钮,为了执行保存,我需要标题中的当前数据。

我怎样才能做到这一点?

这是一些当前的代码:

    import UIKit

// collection view class
class EditUserProfileHeader: UICollectionViewCell, UITextViewDelegate {
    var delegate: CustomHeaderDelegate?

    //(... some default code ...)
    override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
        let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerId, for: indexPath) as! CustomHeader
        header.delegate = self
        return header
    }

    // header delegate conform
    func didTapPhoto() {
        // this fires everytime the button is pressed inside the header
        print("didTapPhoto was tapped inside the header")
    }


    func didTapSave() {
        //here I need the header's data from it's labels and so on
    }

}


protocol CustomHeaderDelegate {
    func didTapPhoto()
}



class CustomHeader: UICollectionViewCell { 
    var delegate: CustomHeaderDelegate?
    //(... some class regular code ...)

    func didTapPhoto() {
        delegate?.didTapPhoto() // here I pass to the collectionView that this button was pressed in the header
    }

}

正如您所看到的,我已经实现了一个委托,只要标题中出现didTapButton,我就会调用委托函数,因此我在collectionView中知道按钮被触发了。 / p>

现在我需要尝试相反的事情;当我点击collectionView内的按钮时,我需要标题来了解它,并且它会检索所需的数据。

任何人都可以帮我解决这个问题吗?

我试图实施另一个协议来做相反的事情,但我可能做错了,因为它没有用,主要是因为我不能说'在父类的委托符合该特定委托的头类中,当我实例化头对象并设置其collectionView时,我在delegate to self中做了什么

由于

1 个答案:

答案 0 :(得分:0)

我设法访问了在didTapSave()函数中插入以下行的所需标题

let header = collectionView?.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: IndexPath(item: 0, section: 0)) as? CustomHeader

因为我可以访问标题更新数据。