STARTED UI实现

新建列表UI,继承到门店详情中,实现跳转流程.

  1. 集配门店code:StoreDistribution

  2. UI:在gb组件中新建实体类:StoreDistribution,实现列表

  3. 跳转:集配门店模块跳转到门店需要接口提供的门店的相关数据:

    1
    2
    3
    4
    5
    6
    
    - (void)showDetailContentWithStoreId:(NSString *)storeId
    shopId:(NSString *)shopId
    storeAppId:(NSString *)storeAppid
    storeName:(NSString *)storeName
    storeState:(NSString *)stState
    userCoordinate:(CLLocationCoordinate2D)userCoordinate

门店详情,插件框架理解

  1. StoreCustomCommomCell模式

为其他库提供自定义门店插件cell的支持.插件code需要对应cell类名,并且该类需要实现,StoreCustomCommomCell是基于方式二的一种特殊情况

1
+(UIView *)contentViewWithAppid:(NSString *)appid shopAppid:(NSString *)shopId storeId:(NSString *)storeId containsVC:(UIViewController *)vc delegate:(id)delegate title:(NSString *)title;

自适应cell高度的方法: 在实现上述方法的基础上,回去到cell指针,调用contentViewHeightHasChanged:方法来修改cell高度.

1
((void(*)(id,SEL,CGFloat))objc_msgSend)(delegate,NSSelectorFromString(@"contentViewHeightHasChanged:"),190);

该方法会创建一个view,当门店详情中,配置了该插件的code,就会创建该view,显示在门店详情对应的cell中

  1. 方式二:在liveplay组件中创建一个插件

以StoreDistributionCell为例.新建StoreDistributionCell继承TMPItemBaseCell,然后在StoreTemplateManager中注册插件code,指定cell的高度属性StoreDistributionCell上.

父类TMPItemBaseCell中两个重要的方法: 属性cell高度的接口:可以通过该方法来刷新cell. 在异步请求结束时,可以通过该方法属性cell数据样式.

1
- (void)sendNotificationForFreshUI;

cell加载数据接口: 在cell加载完毕之后,会触发这个接口,便于在此处添加请求接口.

1
2
#pragma mark - requestAPI
-(void)requestToShowContent;

2.1 声明插件code code由后端和前端协商确定,会通过接口返回插件code,加载插件视图,例如:当门店详情接口返回插件code:StoreDistribution等

1
2
#pragma mark - 集配门店
const NSString *TemplateStoreDistribution = @"StoreDistribution";

2.2 映射code到实现类管理加载插件的字典,将code映射到实现类上:例如将StoreDistribution插件code映射到 StoreDistributionCell上.

1
2
3
4
5
6
7
8
9
#pragma mark - 集配门店
const NSString *TemplateStoreDistribution = @"StoreDistribution";
- (NSDictionary *)templateClassNamesDict{
    if (_templateClassNamesDict == nil){
        _templateClassNamesDict = @{
        TemplateStoreDistribution.lowercaseString:NSStringFromClass([StoreDistributionCell class])
        return _templateClassNamesDict;
        }
     }

API实现