From d8cca170d7acdd8d3f04845f8ab9df6b4eec9536 Mon Sep 17 00:00:00 2001 From: Sun Shijie Date: Mon, 24 Apr 2017 01:21:03 +0800 Subject: [PATCH] update README file --- README.md | 108 +++++++++++++++++- .../UserInterfaceState.xcuserstate | Bin 51942 -> 51938 bytes 2 files changed, 106 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7f4de7c..f595c9f 100644 --- a/README.md +++ b/README.md @@ -483,15 +483,119 @@ typedef NS_ENUM(NSInteger, SSJStaticCellType) { viewModel.indicatorLeftTitle = responseDict[@"game_info"]; //刷新tableview - [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + [self.tableView reloadData]; } }); ``` 效果图: -![](http://oih3a9o4n.bkt.clouddn.com/sjstatictableview_7.png) +![](http://oih3a9o4n.bkt.clouddn.com/sjstatictableview_8.png) +## 5. 没有默认数据源的情况 + +SJStaticViewController在创建的时候分为两种情况: + +```objc +//SJStaticTableViewController.h +typedef enum : NSUInteger { + + SJDefaultDataTypeExist, //在表格生成之前就有数据(1. 完全不依赖网络请求,有现成的完整数据 2. 先生成默认数据,然后通过网络请求来更新数据并刷新表格) + SJDefaultDataTypeNone, //无法生成默认数据,需要完全依赖网络请求,在拿到数据后,生成表格 + +}SJDefaultDataType; + +- (instancetype)initWithDefaultDataType:(SJDefaultDataType)defualtDataType; +``` + +```objc +//SJStaticTableViewController.m +- (instancetype)initWithDefaultDataType:(SJDefaultDataType)defualtDataType +{ + self = [super init]; + if (self) { + self.defualtDataType = defualtDataType; + } + return self; +} + +- (instancetype)init +{ + self = [self initWithDefaultDataType:SJDefaultDataTypeExist];//默认是SJDefaultDataTypeExist + return self; +} +``` + +详细说明一下这两种情况: +1. SJDefaultDataTypeExist:在表格生成之前就存在数据,可以是表格的全部数据,也可以是表格的默认数据(后来通过网络请求来更新部分数据,参考上一节)。 +2. SJDefaultDataTypeNone:意味着当前没有任何的默认数据可以使用,也就是无法生成tableview,需要在网络请求拿到数据后,再手动调用生成数据源,生成表格的方法。 +```objc +- (void)viewDidLoad { + + [super viewDidLoad]; + [self configureNav]; + + //在能够提供给tableivew全部,或者部分数据源的情况下,可以先构造出tableview; + //否则,需要在网络请求结束后,手动调用configureTableView方法 + if (self.defualtDataType == SJDefaultDataTypeExist) { + [self configureTableView]; + } +} + +//只有在SJDefaultDataTypeExist的时候才会自动调用,否则需要手动调用 +- (void)configureTableView +{ + [self createDataSource];//生成数据源 + [self createTableView];//生成表格 +} +``` +看一个例子,我们将表情页设置为``SJDefaultDataTypeNone``,那么就意味着我们需要手动调用``configureTableView``方法: + +```objc +- (void)viewDidLoad { + + [super viewDidLoad]; + + self.navigationItem.title = @"表情"; + [self networkRequest]; +} + + +- (void)networkRequest +{ + [MBProgressHUD showHUDAddedTo: self.view animated:YES]; + + //模拟网络请求 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + + [MBProgressHUD hideHUDForView: self.view animated:YES]; + self.modelsArray = [Factory emoticonPage];//网络请求后,将数据保存在self.modelsArray里面 + [self configureTableView];//手动调用 + + }); +} + +- (void)createDataSource +{ + self.dataSource = [[SJStaticTableViewDataSource alloc] initWithViewModelsArray:self.modelsArray configureBlock:^(SJStaticTableViewCell *cell, SJStaticTableviewCellViewModel *viewModel) { + + switch (viewModel.staticCellType) { + + case SJStaticCellTypeSystemAccessoryDisclosureIndicator: + { + [cell configureAccessoryDisclosureIndicatorCellWithViewModel:viewModel]; + } + break; + + default: + break; + } + }]; +} +``` + +看一下效果图: +![](http://oih3a9o4n.bkt.clouddn.com/sjstatictableview_9.png) ## License diff --git a/SJStaticTableViewDemo/SJStaticTableViewDemo.xcodeproj/project.xcworkspace/xcuserdata/SunShijie.xcuserdatad/UserInterfaceState.xcuserstate b/SJStaticTableViewDemo/SJStaticTableViewDemo.xcodeproj/project.xcworkspace/xcuserdata/SunShijie.xcuserdatad/UserInterfaceState.xcuserstate index 774f90051d91495538e9a841f6bef8a2807415da..86abb1207a6c0f11760a519fec0aa89057be3659 100644 GIT binary patch delta 7271 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 N?D(Jh|8u