您的位置:首页 > 移动开发 > IOS开发

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界面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS CodingNet