CodingNet - Learning - 9

我们继续到下一个页面:



接下来聚焦到这个页面,首先从我们关心的TableView和Cell开始入手

Cell的界面实现没有什么难度。
用到一个轮子:SWTableViewCell , 可以实现删除的一个很好的效果
点击设置常用,添加了一个pin的效果是怎么实现的呢?
刚开始想了很久,想过直接在ImageView上添加绘图的badgeView,或者甚至请求服务器返回哈哈,让服务器帮你添加


不过实现却是比较普通的,在ContentView上添加一个badgeView

[self.contentView addBadgeTip:badgeTip withCenterPosition:CGPointMake(10+kProjectListCell_IconHeight, 15)];


实现在UIView+Common里面




接下来我们从刷新的角度来剖析实现:

首先下拉刷新用到的几个三方库:

SVPullToRefresh
ODRefreshControl



分别有三个行为会调起刷新的行为:


1.点击tabBarItems项


2
.下拉tableView


3
.从别视图控制器回到该视图控制器






1.点击tabBarItems项:


记得前面的基类控制器:BaseViewController 的方法:
- (void)tabBarItemClicked;
而在Project_RootViewController中我们重写这个方法:
- (void)tabBarItemClicked{
    [super tabBarItemClicked];
    if (_myCarousel.currentItemView && [_myCarousel.currentItemView isKindOfClass:[ProjectListView class]]) {
        ProjectListView *listView = (ProjectListView *)_myCarousel.currentItemView;
        [listView tabBarItemClicked];
    }
}

在ProjectListView 实现:

- (void)tabBarItemClicked{
    if (_myTableView.contentOffset.y > 0) {
        [_myTableView setContentOffset:CGPointZero animated:YES];
    }else if (!self.myRefreshControl.isAnimating){
        [self.myRefreshControl beginRefreshing];
        [self.myTableView setContentOffset:CGPointMake(0, -44)];
        [self refresh];
    }
}

这样逐层传递这样就可以调用刷新方法了





第二三的方法就不多说了,就是简单的调用和适当嵌套

而我们要讲的是,这么多个刷新方法,都调用到同一个操作,sendRequest:

- (void)refreshUI{
    [_myTableView reloadData];
    [self refreshFirst];
}
- (void)refreshToQueryData{
    [self refresh];
}

- (void)refresh{
//    _statusView.hidden=TRUE;
    
    
    NSString *headerTitle=[self getSectionHeaderName];
    if (headerTitle.length>0) {
        self.noticeLab.text=headerTitle;
        self.statusView.hidden=FALSE;
    }
    
    if (_myProjects.isLoading) {
        return;
    }
    [self sendRequest];
}

- (void)refreshFirst{
    if (_myProjects && !_myProjects.list) {
        [self performSelector:@selector(refresh) withObject:nil afterDelay:0.3];
    }
}

- (void)refreshMore{
    if (_myProjects.isLoading || !_myProjects.canLoadMore) {
        [_myTableView.infiniteScrollingView stopAnimating];
        return;
    }
    _myProjects.willLoadMore = YES;
    [self sendRequest];
}


最重要的如何理解这个sendRequest做了什么,不妨现在网络可用的情况下操作三种刷新,并输出后台,然后在网络不可用的情况下刷新并输出后台。可以看到,每一次刷新都要请求服务器,所以还是最重要的部分在网络库的封装是否合理,高效。

而网络库的封装是否合理在于和本地缓存的实现方案是否严谨,高效!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值