第三方库WMZPageController学习记录

228 阅读1分钟

一、链式语法的实现:

定义在WMZPageConfig文件中:

#define WMZPagePropStatementAndPropSetFuncStatement(propertyModifier,className, propertyPointerType, propertyName)           \
@property(nonatomic,propertyModifier)propertyPointerType  propertyName;                                                 \
- (className * (^) (propertyPointerType propertyName)) propertyName##Set;


#define WMZPagePropSetFuncImplementation(className, propertyPointerType, propertyName)                                       \
- (className * (^) (propertyPointerType propertyName))propertyName##Set{                                                \
return ^(propertyPointerType propertyName) {                                                                            \
self->_##propertyName = propertyName;                                                                                   \
return self;                                                                                                            \
};                                                                                                                      \
}

使用的地方WMZPageParam(参数),举例:

WMZPagePropStatementAndPropSetFuncStatement(strong, WMZPageParam,NSArray*,              wTitleArr)

将上述宏替换掉的结果为:

@property(nonatomic,strong)NSArray*  wTitleArr;//属性定义

- (WMZPageParam * (^) (NSArray* wTitleArr)) wTitleArrSet;//属性Setter方法

- (WMZPageParam * (^) (NSArray* wTitleArr))wTitleArrSet{//属性Setter方法实现
    return ^(NSArray* wTitleArr) {
        self->_wTitleArr = wTitleArr;
        return self;
    };
}

二、C语言实现一个类

定义位置:WMZPageParam.h

WMZPageParam * PageParam(void);

实现位置:WMZPageParam.m

WMZPageParam * PageParam(void){
    return  [WMZPageParam new];
}

使用:

WMZPageParam *param = WMZPageParam()

延伸:这个用实例方法和类方法都可以实现,目的是为了初始化一个实例对象。

三、数组方法

[self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

作用:数据里面的所有对象依次执行该方法。

四、详解iOS开发在Category和Protocol中添加属性(Property)

参考博客:blog.csdn.net/u010347934/…

五、WMZPageController

1、导航栏设置

2、横竖屏处理

3、将 WMZPageView 添加到当前控制器的View里面

4、实现WMZPageScrollProcotol协议里面的属性@synthesize param = _param ;...(编译器期间,让编译器自动生成getter/setter方法。)

六、WMZPageView

Demo中 App使用->爱奇艺 的视图结构: image.png

//初始化的时候调用showData方法,这里设置默认param ,配置UI
- (void)showData{
    [self.param defaultProperties];
    [self setUpUI:YES];
}

//upSc和downSc的关系
self.downSc.tableFooterView = self.upSc;

upSc //WMZPageLoopView继承自UIView;头部标题滚动视图,也就是菜单视图底部view
upSc.mainView //WMZPageMenuView继承自UIScrollView,菜单视图
upSc.dataView //WMZPageDataView继承自UIScrollView,底部视图

downSc  //WMZPageScroller继承自UITableView;底部全屏滚动视图,也就是sonChildVC底部view

小结

WMZPageController整体是一个tableview,菜单和子控制器视图均为UIScrollView,且两者均为UIView的子视图,该子视图作为tableviewtableFooterView