Skip to content

Commit d8cca17

Browse files
committed
update README file
1 parent 545741e commit d8cca17

2 files changed

Lines changed: 106 additions & 2 deletions

File tree

README.md

Lines changed: 106 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
![](http://oih3a9o4n.bkt.clouddn.com/sjstatictableview_7.png)
493+
![](http://oih3a9o4n.bkt.clouddn.com/sjstatictableview_8.png)
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

Comments
 (0)