簡體   English   中英

將數據從Collectionview傳遞到UIcollectionResuableview

[英]pass data from Collectionview to UIcollectionResuableview

我有一個collectionView,數據(字符串)在加載時從另一個VC傳遞到該collectionView。 現在,當我想將此數據(字符串)傳遞給UICollectionReusabelView時。 我正在執行以下步驟

CollectionViewVC:

class PhotoDetailVC: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, PDHeaderViewDelegate {



// Following variables are the ones to which the data is passed to. 
var image : String!
var user: User!
var post: Posts!


@IBOutlet weak var collectionView: UICollectionView!


override func viewDidLoad() {
    super.viewDidLoad()

    print(post.imageURL)

    collectionView.delegate = self
    collectionView.dataSource = self

    setupCells()
    increaseView()
}


func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "mainImage", for: indexPath) as! PDHeader

    // I am setting the ReusableView properties through this section. Instead I just want to pass them to the header and then do stuff over there.

    header.post = self.post
    header.lol = post.postauthor
    header.label.text = post.caption
    header.label.sizeToFit()
    header.delegate = self
    let ref = URL(string: post.imageURL)
    Nuke.loadImage(with: ref!, into: header.mainPic)
    imageInHeaderForAuthor(author: post.postauthor, view: header.profilePic)

    return header
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {

    let size = CGSize(width: collectionView.frame.width, height: collectionView.frame.height - 15)
    return size
}


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let width = (collectionView.bounds.size.width/3) - 1
    let size = CGSize(width: width, height: width)
    return size

}

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 1.0
}

func collectionView(_ collectionView: UICollectionView, layout
    collectionViewLayout: UICollectionViewLayout,
                    minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 1.0
}


func imageInHeaderForAuthor(author: String, view: UIImageView){
    FBDataservice.ds.REF_USERS.child(author).observeSingleEvent(of: .value, with: { (snapshot) in
        if let allData = snapshot.value as? Dictionary<String, Any> {
            if let cred = allData["credentials"] as? Dictionary<String, Any> {
                let postuser = User(userid: author, userData: cred)
                if postuser.userPic != nil {
                    let req = URL(string: postuser.userPic)
                    Nuke.loadImage(with: req!, into: view)
                }
            }
        }
    })
}

}

ReusableView:

class PDHeader: UICollectionReusableView, FloatyDelegate {

@IBOutlet weak var label: UILabel!
@IBOutlet weak var mainPic: UIImageView!
@IBOutlet weak var profilePic: UIImageView!

var image : String!
var post: Posts!
var lol: String!
var floaty = Floaty()
var isOwner : Bool!
var delegate: PDHeaderViewDelegate!



override func awakeFromNib() {
    super.awakeFromNib()

    //This returns nil every time.
    print(post.postauthor)

    layoutFAB()
    profilePic.makeCircle()
    label.addDropShadow(opacity: 3, radius: 8)

}




func setDelegate(delegate: PDHeaderViewDelegate) {
    self.delegate = delegate
}

func layoutFAB() {
    floaty.openAnimationType = .pop
    floaty.buttonImage = UIImage(named: "options")
    floaty.addItem("Report", icon: UIImage(named: "trash")) { item in
        self.delegate.fabReportClicked()
    }
    if isOwner{
        floaty.addItem("Edit Profile", icon: UIImage(named: "edit")) { item in
            self.delegate.fabEditClicked()
        }
        floaty.addItem("Delete", icon: UIImage(named: "trash")) { item in
            self.delegate.fabDeleteButton()
        }
    }

    floaty.fabDelegate = self
    floaty.buttonColor = UIColor.white
    floaty.hasShadow = true
    floaty.size = 45
    addSubview(floaty)
}

}

我已經在代碼中注釋了這些問題。 TL; DR-集合不會將數據傳遞到標頭,因此我必須從viewForSupplementaryElementOfKind設置它們。

這里的實際問題是什么? 在將數據傳遞給報頭之前是否正在加載報頭? 如果沒有,我該如何解決?

如果我了解您可以嘗試使用此選項:

class PDHeader: UICollectionReusableView, FloatyDelegate {

    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var mainPic: UIImageView!
    @IBOutlet weak var profilePic: UIImageView!

    var image : String!
    var lol: String!
    var floaty = Floaty()
    var isOwner : Bool!
    var delegate: PDHeaderViewDelegate!

    var post: Posts!{
        didSet {
           lol = post.postauthor
           label.text = post.caption
           // etc ...
        }

然后:

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "mainImage", for: indexPath) as! PDHeader

    header.post = self.post
    header.delegate = self

    return header
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM