@@ -483,15 +483,119 @@ typedef NS_ENUM(NSInteger, SSJStaticCellType) {
483483 viewModel.indicatorLeftTitle = responseDict[ @"game_info"] ;
484484
485485 //刷新tableview
486- [ self.tableView reloadRowsAtIndexPaths:@ [ indexPath ] withRowAnimation : UITableViewRowAnimationFade ] ;
486+ [ self.tableView reloadData ] ;
487487 }
488488 });
489489```
490490
491491效果图:
492492
493- 
493+ 
494494
495+ ## 5. 没有默认数据源的情况
496+
497+ SJStaticViewController在创建的时候分为两种情况:
498+
499+ ```objc
500+ //SJStaticTableViewController.h
501+ typedef enum : NSUInteger {
502+
503+ SJDefaultDataTypeExist, //在表格生成之前就有数据(1. 完全不依赖网络请求,有现成的完整数据 2. 先生成默认数据,然后通过网络请求来更新数据并刷新表格)
504+ SJDefaultDataTypeNone, //无法生成默认数据,需要完全依赖网络请求,在拿到数据后,生成表格
505+
506+ }SJDefaultDataType;
507+
508+ - (instancetype)initWithDefaultDataType:(SJDefaultDataType)defualtDataType;
509+ ```
510+
511+ ``` objc
512+ // SJStaticTableViewController.m
513+ - (instancetype )initWithDefaultDataType:(SJDefaultDataType)defualtDataType
514+ {
515+ self = [super init];
516+ if (self) {
517+ self.defualtDataType = defualtDataType;
518+ }
519+ return self;
520+ }
521+
522+ - (instancetype )init
523+ {
524+ self = [self initWithDefaultDataType:SJDefaultDataTypeExist];//默认是SJDefaultDataTypeExist
525+ return self;
526+ }
527+ ```
528+
529+ 详细说明一下这两种情况:
530+ 1 . SJDefaultDataTypeExist:在表格生成之前就存在数据,可以是表格的全部数据,也可以是表格的默认数据(后来通过网络请求来更新部分数据,参考上一节)。
531+ 2 . SJDefaultDataTypeNone:意味着当前没有任何的默认数据可以使用,也就是无法生成tableview,需要在网络请求拿到数据后,再手动调用生成数据源,生成表格的方法。
532+ ``` objc
533+ - (void )viewDidLoad {
534+
535+ [super viewDidLoad];
536+ [self configureNav];
537+
538+ //在能够提供给tableivew全部,或者部分数据源的情况下,可以先构造出tableview;
539+ //否则,需要在网络请求结束后,手动调用configureTableView方法
540+ if (self.defualtDataType == SJDefaultDataTypeExist) {
541+ [self configureTableView];
542+ }
543+ }
544+
545+ // 只有在SJDefaultDataTypeExist的时候才会自动调用,否则需要手动调用
546+ - (void )configureTableView
547+ {
548+ [self createDataSource];//生成数据源
549+ [self createTableView];//生成表格
550+ }
551+ ```
552+ 看一个例子,我们将表情页设置为`` SJDefaultDataTypeNone `` ,那么就意味着我们需要手动调用`` configureTableView `` 方法:
553+
554+ ``` objc
555+ - (void )viewDidLoad {
556+
557+ [super viewDidLoad];
558+
559+ self.navigationItem.title = @"表情";
560+ [self networkRequest];
561+ }
562+
563+
564+ - (void )networkRequest
565+ {
566+ [MBProgressHUD showHUDAddedTo: self.view animated:YES];
567+
568+ //模拟网络请求
569+ dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
570+
571+ [ MBProgressHUD hideHUDForView: self.view animated: YES ] ;
572+ self.modelsArray = [ Factory emoticonPage] ;//网络请求后,将数据保存在self.modelsArray里面
573+ [ self configureTableView] ;//手动调用
574+
575+ });
576+ }
577+
578+ - (void )createDataSource
579+ {
580+ self.dataSource = [[SJStaticTableViewDataSource alloc] initWithViewModelsArray:self.modelsArray configureBlock:^(SJStaticTableViewCell *cell, SJStaticTableviewCellViewModel *viewModel) {
581+
582+ switch (viewModel.staticCellType) {
583+
584+ case SJStaticCellTypeSystemAccessoryDisclosureIndicator:
585+ {
586+ [cell configureAccessoryDisclosureIndicatorCellWithViewModel:viewModel];
587+ }
588+ break;
589+
590+ default:
591+ break;
592+ }
593+ }];
594+ }
595+ ```
596+
597+ 看一下效果图:
598+ ![ ] ( http://oih3a9o4n.bkt.clouddn.com/sjstatictableview_9.png )
495599
496600## License
497601
0 commit comments