CodingNet - Learning - 15
来源:互联网 发布:第九交响曲 知乎 编辑:程序博客网 时间:2024/06/12 19:08
上面讲到漏斗遮挡列表选择不同视图的实现是通过iCarousel来实现
但是,如果我们选择的是空的页面,显示的默认页面,怎么处理?我们回到ProjectListView中,看到代码:
[weakSelf configBlankPage:blankPageType hasData:(weakSelf.myProjects.list.count > 0) hasError:(error != nil) reloadButtonBlock:^(id sender) { [weakSelf refresh];}];
这个就是配置默认页面的关键,可以在UIView+Common看到具体的实现:
- (void)configBlankPage:(EaseBlankPageType)blankPageType hasData:(BOOL)hasData hasError:(BOOL)hasError reloadButtonBlock:(void (^)(id))block{ if (hasData) { if (self.blankPageView) { self.blankPageView.hidden = YES; [self.blankPageView removeFromSuperview]; } }else{ if (!self.blankPageView) { self.blankPageView = [[EaseBlankPageView alloc] initWithFrame:self.bounds]; } self.blankPageView.hidden = NO; [self.blankPageContainer addSubview:self.blankPageView];// [self.blankPageContainer insertSubview:self.blankPageView atIndex:0];// [self.blankPageView mas_makeConstraints:^(MASConstraintMaker *make) {// make.size.equalTo(self);// make.top.left.equalTo(self.blankPageContainer);// }]; [self.blankPageView configWithType:blankPageType hasData:hasData hasError:hasError reloadButtonBlock:block]; }}
这里的实现原理就是:
1.先通过 objc runtime 的 associate 让UIView类目拥有该属性变量
2.如果有数据,不操作,若无数据,则初始化EaseBlankPageView
3.配置blankPageView
注意点是,如果存在当前的页面是TableView的界面,需要将它添加在TableView上,所以需要遍历找到它:
- (UIView *)blankPageContainer{ UIView *blankPageContainer = self; for (UIView *aView in [self subviews]) { if ([aView isKindOfClass:[UITableView class]]) { blankPageContainer = aView; } } return blankPageContainer;}
配置blankPageView的操作就不多说了,看看这个方法的实现即可
最后需要注意的是,如何实现调用这一part
我们看到这个属性:
@property(copy, nonatomic) void(^clickButtonBlock)(EaseBlankPageType curType);在blankPageView类也存在这个属性,并且在sendRequest实现传递执行(实现):
//空白页按钮事件 self.blankPageView.clickButtonBlock=^(EaseBlankPageType curType) { weakSelf.clickButtonBlock(curType); };而在Project_RootViewController调用ProjectListView处(具体在iCarousel 委托实现中) 回调实现操作: listView.clickButtonBlock=^(EaseBlankPageType curType) { switch (curType) { case EaseBlankPageTypeProject_ALL: case EaseBlankPageTypeProject_CREATE: case EaseBlankPageTypeProject_JOIN: [weakSelf goToNewProjectVC]; break; case EaseBlankPageTypeProject_WATCHED: case EaseBlankPageTypeProject_STARED: [weakSelf goToProjectSquareVC]; break; default: break; } };
即在每次请求sendRequest操作都执行一次这个clickButtonBlock操作,这样就实现了每次更换iCarousel界面
0 0
- CodingNet - Learning - 15
- CodingNet - Learning - 0
- CodingNet - Learning - 1
- CodingNet - Learning - 2
- CodingNet - Learning - 3
- CodingNet - Learning - 4
- CodingNet - Learning - 5
- CodingNet - Learning - 6
- CodingNet - Learning - 7
- CodingNet - Learning - 8
- CodingNet - Learning - 9
- CodingNet - Learning - 10
- CodingNet - Learning - 11
- CodingNet - Learning - 12
- CodingNet - Learning - 13
- CodingNet - Learning - 14
- CodingNet - Learning - 16
- CodingNet - Learning - 17
- 什么是Java的反射机制
- java重double类型不能用来计算问题
- POI,POI 简介,POI 导出
- golang采集,适合golang初学者入门,笔者亦是新手
- HDOJ 2485 Destroying the bus stations DFS+BFS
- CodingNet - Learning - 15
- lua学习(3)______lua中的基本类型
- Java-Gson解析-02 借助Token解析JSONArray
- 第一个出现一次的字符
- Spring入门<一>
- BSON与JSON
- android开发常用工具类网站
- leetcode【1+167 Two Sum 系列】【python】
- HttpURLConnection请求数据