CodingNet - Learning - 15
2016-09-01 19:33
399 查看
上面讲到漏斗遮挡列表选择不同视图的实现是通过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界面
但是,如果我们选择的是空的页面,显示的默认页面,怎么处理?
我们回到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界面
相关文章推荐
- CS231n学习笔记--15. Efficient Methods and Hardware for Deep Learning
- Crazy Learning for Day 15
- Coursera台大机器学习课程笔记15 -- Three Learning Principles
- CalTech machine learning, video 15 note(Kernel Method)
- Learning Python(15)--第三方psutil模块
- Spring v3.0.2 Learning Note 15 - Use Velocity Email Template with Spring
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 Q13-15 C++实现
- 笔记:Semi-supervised domain adaptation with subspace learning for visual recognition (cvpr15)
- CodingNet - Learning - 7
- Machine Learning Foundations q15
- In-depth introduction to machine learning in 15 hours of expert videos
- 斯坦福大学公开课 :机器学习课程(Andrew Ng)——15、无监督学习:Reinforcement Learning and Control
- Learning WPF / March 15,2015 / Sunday
- Unity Learning for Day 15
- learning python in the hard way习题11~15的附加题练习
- CodingNet - Learning - 8
- 机器学习中的神经网络Neural Networks for Machine Learning:Lecture 15 Quiz
- Linux开发心得总结15 - Learning about Linux Processes
- CodingNet - Learning - 5
- CodingNet - Learning - 14