学习oschina的源代码笔记( 整体,以及UITableView操作)

程序结构:

1. 整个程序在UIViewController 中 嵌套入了 UIViewController。

2. 对于“动弹页面”,UIViewController中放入UITableView。

3. Tool.h 中存放一些公用的方法。


使用工具:

1. 对于“需要登录”的提示,使用了苹果自带的actionsheet。

2. 对于不挡住主屏幕的文字提示,使用了 GCDiscreetNotificationView。

3.对于需要加载较长时间的等待提示(显示在屏幕中央),使用了 MBProgressHUD。

4.异步加载图片,使用了egoImage。

5.下拉刷新,使用了egoRefresh。

6.读取网络数据,以及检查网络是否连上,使用了AFNetwork。

7.图片下载及放置缓存,使用了oschina自己写的IconDownload。


登录相关执行流程:

1. 在viewController的viewDidAppear 处做出判断:if(self.isLoginJustNow)。

2.如果发现isLoginJustNow变成 YES 了,则刷新该页面,同时将 isLoginJustNow 设置成NO。


UItableView相关执行流程:

1. UITableVIew的操作中的刷新流程:

a. 判断 (isLoading ||isLoadOver) ,如果真,则直接返回,不执行刷新。

b. 判断是否为重新刷新:  (!noRefresh),如果是,则 allCount = 0。

c. 设置 int pageIndex =allCount/20; (20是一页的行数

d. isLoading =YES;

e. 执行网络查询语句。

f. 判断是否为重新刷新,如果是,则调用 clear 方法。(在这里调用clear而不是一开始就调用,是为了避免数据读取如果失败了,原有数据也clear掉

g.  isLoading =NO;

h. 判断查出的数据是否小于20.如果小于,表示已经查完:isLoadOver =YES(如果isLoadOver=NO,则在最后一行显示“下一页”)

i. 判断查出来的列表是否为空,如果是,则:   

                isLoadOver = YES;
                [self.tableTweets reloadData];
                [self doneLoadingTableViewData];
                return;


 
 

j. 如果查出来的列表不为空,则在newTweets数组的组建时逐条判断服务端来的每条数据是否与tweets中数据相同。然后:

            [tweets addObjectsFromArray:newTweets];
            [self.tableTweets reloadData];
            [self doneLoadingTableViewData];


 

k. 如果查询失败,则:

        isLoading = NO;
        NSLog(@"动弹列表下载失败");
        //下拉刷新恢复
        [self doneLoadingTableViewData];


 

并相应做出提示:

         if ([Config Instance].isNetworkRunning == NO) {
            return;
        }
        if ([Config Instance].isNetworkRunning) {
            [Tool ToastNotification:@"错误 网络无连接" andView:self.view andLoading:NO andIsBottom:NO];
        }


 

l. 如果以上步骤没有return过,最后执行:

     [self.tableTweets reloadData];


 

2. UITableVIew的操作中的clear流程:

    allCount = 0;  //清空计数
    [tweets removeAllObjects]; // 清空table数组
    [imageDownloadsInProgress removeAllObjects];
    [tweetDownloadsInProgress removeAllObjects];
    isLoadOver = NO;  // 设置列表加载状态的标识符

3. 读取每行中的头像流程:

    a. 判断 该行所需展示的object 中该头像属性是否为空,若不为空则直接显示该属性。

    b. 判断该用户是否设置过头像,若未设置过则显示默认头像图片(本地)。

    c. 判断cache中是否存有该头像,若cache中没有则进行联网读取。


4. 关于点击“下一页”:

    a. 为“下一页”定义了一个nib。nib中的文字内容是“下一页”还是“正在加载...”由传入的参数isLoading 决定。

    b. 点击下一页时:

          1.  isLoading = YES;

          2. [ self.uitableView reloadData ];同时 发起加载下一页的数据请求。(注:在reloadData时,“下一页”那一行会重新绘制。这个时候即显示“正在加载...”)






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值