封装展示没有数据的tableview

首先先展示有数据的时候。
封装展示没有数据的tableview_第1张图片

下面要展示的数据。

-(void)setUpTgData{
    // 1.获得plist的全路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"tgs.plist" ofType:nil];

    // 2.加载数组
    NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
    self.tgs =  [MJTg objectArrayWithKeyValuesArray:dictArray];
}

接下来把这句注掉

    self.tgs =  [MJTg objectArrayWithKeyValuesArray:dictArray];

封装展示没有数据的tableview_第2张图片

好了 进入 正题了。
封装思路:

  1. 给tableView写一个分类,的实例方法
  2. 给该实例方法传一个没有数据的字符串,和一个数据源的个数(来判断有木有数据)
  3. 通过数据源的个数,来决定要不要横线。
- (void) tableViewDisplayWitMsg:(NSString *) message ifNecessaryForRowCount:(NSUInteger) rowCount
{
    if (rowCount == 0) {
        // 没有数据的时候,UILabel的显示样式
        UILabel *messageLabel = [UILabel new];
        messageLabel.text = message;
        messageLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
        messageLabel.textColor = [UIColor lightGrayColor];
        label居中
        messageLabel.textAlignment = NSTextAlignmentCenter;
        [messageLabel sizeToFit];

        self.backgroundView = messageLabel;
        没有横线
        self.separatorStyle = UITableViewCellSeparatorStyleNone;
    } else {
        self.backgroundView = nil;
        有横线
        self.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    }
}

好了 那怎么用它呢?
直接在控制器里面的数据源方法里面。调用这个方法。

#pragma mark - 数据源方法
/**
 *  一共有多少行数据
 */
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    [tableView tableViewDisplayWitMsg:@"客官。没有数据" ifNecessaryForRowCount:self.tgs.count];
    return self.tgs.count;
}


效果图如下

封装展示没有数据的tableview_第3张图片

这样就OK了
现在随便一个tableView都可以用它,只要在头文件里面倒入

#import "UITableView+JFNoDataLabel.h"

这个分类 大功告成。
2015 - 11 - 12 上海

你可能感兴趣的:(面向模型,封装)