如果没有 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 视图或集合视图为空,则想要显示,并且会自动显示它,确保它居中。
它被大量流行的应用程序使用。
您可以在这里找到它们。
如果 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 视图或集合视图为空,则想要显示,并且会自动显示它,确保它居中。
它被大量流行的应用程序使用。
您可以在这里找到它们。