CodingNet - Learning - 15

上面讲到漏斗遮挡列表选择不同视图的实现是通过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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值