UICollectionViewCell仅在满足特定条件时显示

时间:2016-12-14 01:55:35

标签: swift cocoa-touch uicollectionview

我不知道这是否可行但是,我只是在满足某个条件时才尝试使用CollectionView cellForItem返回一个单元格。

这是我的功能:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "FriendsRecentCell", for: indexPath) as! FriendsRecentCell

        var fObj = PFObject(className: FRIENDS_CLASS_NAME)
        fObj = recentArray[indexPath.row]

        // Get User Pointer
        let userPointer = fObj[FRIENDS_IS_FRIEND_WITH] as! PFUser
        userPointer.fetchIfNeededInBackground(block: { (user, error) in
            if error == nil {

                // Get heys sent to you as currentUser
                let query = PFQuery(className: HEYS_CLASS_NAME)
                query.whereKey(HEYS_RECEIVER, equalTo: PFUser.current()!)
                query.whereKey(HEYS_SENDER, equalTo: userPointer)
                query.countObjectsInBackground { (count, error) in
                    if count != 0 {
                        // Get User fullname
                        cell.userLabelRecent.text = "\(userPointer[USER_FULLNAME]!)"

                        // Get Avatar
                        cell.avatarImageRecent.image = UIImage(named: "avatar")
                        cell.avatarImageRecent.layer.cornerRadius = cell.avatarImageRecent.bounds.size.width/2
                        let imageFile = userPointer[USER_AVATAR] as? PFFile
                        imageFile?.getDataInBackground(block: { (imageData, error) in
                            if error == nil {
                                if let imageData = imageData {
                                    cell.avatarImageRecent.image = UIImage(data:imageData)
                                }}})
                    } else {
                    }}

            }})

        return cell

    }

我只希望单元格返回if count != 0。有没有办法去做这个?我完全迷失了。

1 个答案:

答案 0 :(得分:0)

在调用此方法的时候,您已经告诉集合视图,该索引路径中存在一个单元格。既然你已经这样做了,你来提供一个单元格;没有办法 - 方法签名是非可选的。

如果您只想在某些情况下显示单元格,则必须在此过程的早期处理它。调用collectionView(_:numberOfItemsInSection:)时,您需要确定是否应显示单元格并返回正确数量的项目。然后你只会被问到这些细胞。