如果没有 collectionview 项,如何在单元格中显示 UILabel "No result found"?

How can I display UILabel "No result found" in cell if no collectionview item?

如果 collectionview 中没有数据,我想在单元格中显示 UILabel "No result found"("HomeProductCell",如下所示)。 如何在单元格中设置此标签?请帮忙

这是我的代码:-

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

    if (section == 3) { //Product

        if(_youLikeItem.count >0)
        {
           return _youLikeItem.count;  
        }

    }
    return 0;
} 


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *gridcell = nil;

    if (indexPath.section == 3) {
        HomeProductCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:HomeProductCellID forIndexPath:indexPath];

        if(_youLikeItem.count > 0){

            cell.productImage = [_youLikeItem[indexPath.row]valueForKey:@"image"];
            cell.productName = [_youLikeItem[indexPath.row]valueForKey:@"name"];
            cell.productPrice = [_youLikeItem[indexPath.row]valueForKey:@"price"];

            gridcell = cell;
        }
        else
        {
            UILabel *noDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, collectionView.bounds.size.width, collectionView.bounds.size.height)];
            noDataLabel.text = @"No product(s) available";
            noDataLabel.textColor = [UIColor grayColor];
            noDataLabel.font = PFR18Font;
            noDataLabel.textAlignment = NSTextAlignmentCenter;
            [cell addSubview:noDataLabel];

        }
    }

确保您指明第 3 部分中至少有 1 项:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    if (section == 3) { //Product
        if (_youLikeItem.count > 0) {
           return _youLikeItem.count;  
        } else {
           return 1;
        }
    }
    return 0;
}

这样就可以了。如果您想格外小心,那么在 collectionView:cellForItemAtIndexPath: 中您可以更改

if(_youLikeItem.count > 0){

if (indexPath.item < _youLikeItem.count) {

(N.B。对于集合视图,您应该使用 indexPath.item,而不是 indexPath.row。)

你需要做的是

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

if (section == 3) { //Product

    if(_youLikeItem.count >0)
    {
       return _youLikeItem.count;  
    }else{
       return 1; //this will ensure that there will be single cell in this section which will display 'No product(s) available'
    }
}
return 0;

}

试试这个代码

Objective-c

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView {
 if ([dataSource count] > 0)
{

    collectionView.backgroundView = nil;
}
else
{   
    UILabel *noDataLabel         = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, collectionView.bounds.size.width, collectionView.bounds.size.height)];
    noDataLabel.text             = @"No data found :(";
    noDataLabel.textColor        = [UIColor blackColor];
    noDataLabel.textAlignment    = NSTextAlignmentCenter;
    collectionView.backgroundView = noDataLabel;
    collectionView.separatorStyle = UITableViewCellSeparatorStyleNone;
}

return dataSource;
}

Swift

extension UICollectionView{

    func noDataFound(_ dataCount:Int){
        if dataCount <=  0 {

            let label = UILabel()
            label.frame = self.frame
            label.frame.origin.x = 0
            label.frame.origin.y = 0 
            label.textAlignment = .center
            label.text = "No data found :("
            self.backgroundView = label
        }else{
            self.backgroundView = nil
        }
    }

}

使用扩展

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        collectionView.noDataFound(dataSource.count)
        return dataSource.count
    }

您可以使用 DZNEmptyDataSet,它是一个添加了几个委托协议的第三方库,您可以在其中 return 数据(image/title/description 甚至自定义视图)如果您的 table 视图或集合视图为空,则想要显示,并且会自动显示它,确保它居中。

它被大量流行的应用程序使用。

您可以在这里找到它们。

DZNEmptyDataSet

EmptyDataSet-Swift