iOS开发项目篇—30下拉刷新

iOS开发项目篇—30下拉刷新

一、网络监控

当应用所处的网络环境不好的时候,获取不到相应的网络数据,考虑到用户对应用的使用体验,有必要对网络的状况进行监听。

在程序启动完的时候,监控网络

YYAppDelegate.m文件代码:

 1 //
 2 //  YYAppDelegate.m
 3 //
 4
 5 #import "YYAppDelegate.h"
 6 #import "YYOAuthViewController.h"
 7 #import "YYControllerTool.h"
 8 #import "YYAccountTool.h"
 9 #import "YYAccountModel.h"
10 #import "SDWebImageManager.h"
11 #import "SDImageCache.h"
12 #import "AFNetworking.h"
13 #import "MBProgressHUD+MJ.h"
14
15
16 @implementation YYAppDelegate
17
18 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
19 {
20
21    //1.创建窗口
22     self.window=[[UIWindow alloc]init];
23     self.window.frame=[UIScreen mainScreen].bounds;
24
25
26     //2.显示窗口(主窗口)
27     [self.window makeKeyAndVisible];
28
29     //3.设置窗口的根控制器
30     YYAccountModel *account=[YYAccountTool accountModel];
31
32     if (account) {  //  存在成功授权的账号信息
33         [YYControllerTool chooseRootViewController];
34     }else  //没有登陆过
35     {
36         self.window.rootViewController=[[YYOAuthViewController alloc]init];
37     }
38
39     //4.监控网络状态
40     AFNetworkReachabilityManager *mgr=[AFNetworkReachabilityManager sharedManager];
41     //当网络状态改变的时候,就会调用
42     [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
43         switch (status) {
44             case AFNetworkReachabilityStatusUnknown://未知网络
45             case AFNetworkReachabilityStatusNotReachable://没有网络
46                 YYLog(@"没有网络(断网)");
47                 [MBProgressHUD showError:@"网络异常,请检查网络设置!"];
48                 break;
49             case AFNetworkReachabilityStatusReachableViaWWAN://手机自带网络
50                 YYLog(@"手机自带网络");
51                 break;
52             case AFNetworkReachabilityStatusReachableViaWiFi://WIFI
53                 YYLog(@"WIFI");
54                 break;
55         }
56     }];
57     //开始监控
58     [mgr startMonitoring];
59     return YES;
60 }
61
62
63 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
64 {
65     // 赶紧清除所有的内存缓存
66     [[SDImageCache sharedImageCache] clearMemory];
67
68     // 赶紧停止正在进行的图片下载操作
69     [[SDWebImageManager sharedManager] cancelAll];
70 } 

二、下拉刷新数据的简单说明

代码:

YYHomeTableViewController.m文件

  1 //
  2 //  YYHomeTableViewController.m
  3 //
  4
  5 #import "YYHomeTableViewController.h"
  6 #import "YYOneViewController.h"
  7 #import "YYTitleButton.h"
  8 #import "YYPopMenu.h"
  9 #import "YYAccountModel.h"
 10 #import "YYAccountTool.h"
 11 #import "AFNetworking.h"
 12 #import "UIImageView+WebCache.h"
 13 #import "YYUserModel.h"
 14 #import "YYStatusModel.h"
 15 #import "MJExtension.h"
 16
 17 @interface YYHomeTableViewController ()<YYPopMenuDelegate>
 18 @property(nonatomic,assign)BOOL down;
 19 @property(nonatomic,strong)NSArray *statuses;
 20 @end
 21
 22 @implementation YYHomeTableViewController
 23
 24 - (void)viewDidLoad
 25 {
 26     [super viewDidLoad];
 27
 28     //设置导航栏内容
 29     [self setupNavBar];
 30
 31     //加载最新数据
 32     [self loadNewStatus];
 33
 34     //集成刷新控件
 35     [self setupRefresh];
 36 }
 37
 38 //集成刷新控件
 39 -(void)setupRefresh
 40 {
 41     // 1.添加下拉刷新控件
 42     UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
 43     [self.tableView addSubview:refreshControl];
 44
 45     [self loadNewStatus];
 46 }
 47
 48 /**加载最新微博数据*/
 49 -(void)loadNewStatus
 50 {
 51     //1.获得请求管理者
 52     AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
 53
 54     //2.封装请求参数
 55
 56     NSMutableDictionary *params=[NSMutableDictionary dictionary];
 57     params[@"access_token"] =[YYAccountTool accountModel].access_token;
 58     //设置请求返回3天数据
 59     params[@"count"][email protected]12;
 60
 61
 62     //3.发送Post请求
 63    // url:https://api.weibo.com/2/statuses/home_timeline.json
 64     [mgr GET:@"https://api.weibo.com/2/statuses/home_timeline.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary*accountDict) {
 65
 66         self.statuses=accountDict[@"statuses"];
 67
 68         // 微博字典 -- 数组
 69         NSArray *statusDictArray = accountDict[@"statuses"];
 70
 71         //微博字典数组---》微博模型数组
 72         self.statuses=[YYStatusModel objectArrayWithKeyValuesArray:statusDictArray];
 73
 74         //重新刷新表格
 75         [self.tableView reloadData];
 76     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
 77         YYLog(@"请求失败");
 78     }];
 79
 80 }
 81 /**设置导航栏内容*/
 82 -(void)setupNavBar
 83 {
 84     self.navigationItem.leftBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_friendsearch" highImageName:@"navigationbar_friendsearch_highlighted" target:self action:@selector(friendsearch)];
 85     self.navigationItem.rightBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_pop" highImageName:@"navigationbar_pop_highlighted" target:self action:@selector(pop)];
 86
 87     //设置导航栏按钮
 88     YYTitleButton *titleButton=[[YYTitleButton alloc]init];
 89     //设置文字
 90     [titleButton setTitle:@"首页" forState:UIControlStateNormal];
 91     //设置图标
 92     [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
 93     //设置背景
 94     [titleButton setBackgroundImage:[UIImage resizedImage:@"navigationbar_filter_background_highlighted"] forState:UIControlStateHighlighted];
 95
 96     //设置尺寸
 97     titleButton.width=100;
 98     titleButton.height=35;
 99     //监听按钮的点击事件
100     [titleButton addTarget:self action:@selector(titleButtonClick:) forControlEvents:UIControlEventTouchUpInside];
101     self.navigationItem.titleView=titleButton;
102 }
103 -(void)titleButtonClick:(UIButton *)titleButton
104 {
105
106         [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_up"] forState:UIControlStateNormal];
107
108         UITableView *tableView=[[UITableView alloc]init];
109         [tableView setBackgroundColor:[UIColor yellowColor]];
110         YYPopMenu *menu=[YYPopMenu popMenuWithContentView:tableView];
111         [menu showInRect:CGRectMake(60, 55, 200, 200)];
112         menu.dimBackground=YES;
113
114     menu.arrowPosition=YYPopMenuArrowPositionRight;
115         menu.delegate=self;
116 }
117
118
119 #pragma mark-YYPopMenuDelegate
120 //弹出菜单
121 -(void)popMenuDidDismissed:(YYPopMenu *)popMenu
122 {
123     YYTitleButton *titleButton=(YYTitleButton *)self.navigationItem.titleView;
124     [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
125 }
126 -(void)pop
127 {
128     YYLog(@"---POP---");
129 }
130 -(void)friendsearch
131 {
132     //跳转到one这个子控制器界面
133     YYOneViewController *one=[[YYOneViewController alloc]init];
134     one.title=@"One";
135     //拿到当前控制器
136     [self.navigationController pushViewController:one animated:YES];
137
138 }
139
140 #pragma mark - Table view data source
141 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
142 {
143     return self.statuses.count;
144 }
145
146 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
147 {
148     static NSString *ID = @"cell";
149     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
150     if (!cell) {
151         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
152     }
153
154       //取出这行对应的微博字典数据,转换为数据模型
155     YYStatusModel *status=self.statuses[indexPath.row];
156     cell.textLabel.text=status.text;
157     cell.detailTextLabel.text=status.user.name;
158     NSString *imageUrlStr=status.user.profile_image_url;
159     [cell.imageView setImageWithURL:[NSURL URLWithString:imageUrlStr] placeholderImage:[UIImage imageWithName:@"avatar_default_small"]];
160
161     return cell;
162 }
163
164 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
165 {
166     //点击cell的时候,跳到下一个界面
167     UIViewController *newVc = [[UIViewController alloc] init];
168     newVc.view.backgroundColor = [UIColor redColor];
169     newVc.title = @"新控制器";
170     [self.navigationController pushViewController:newVc animated:YES];
171 }
172
173 @end

实现效果:

   

说明:前者为ios7中得效果。后者为ios6中得效果。

提示:不能直接调用“加载最新微博数据”这个方法,因为如果调用这个方法,那么会重新发送请求给服务器,服务器接受到数据后会直接覆盖以前数组中得数据。

iOS开发项目篇—30下拉刷新

时间: 2024-09-29 23:10:33

iOS开发项目篇—30下拉刷新的相关文章

iOS开发项目篇—32添加上拉刷新数据

iOS开发项目篇—32添加上拉刷新数据 一.简单说明 图片示意 思路:可以自定义一个view(示意xib),在view中添加一个label和菊花,指示状态.把这个view设置为tableView的底部视图. 二.实现过程 1.新建一个类和xib,关联 (1)创建一个类,让其继承自UIView (2)创建一个xib文件,用来定义上拉提示框 (3)定义的xib文件,把类和xib文件进行关联 2.实现代码: YYlaodStatusesFooter.h文件 1 // 2 // YYlaodStatus

iOS开发项目篇—36封装微博业务

iOS开发项目篇—36封装微博业务 一.简单说明 1.请求参数面向模型 2.请求结果面向模型 3.对控制器来说应该屏蔽业务细节.不让控制器关心(知道)业务细节,它只需要知道自己在做某个业务 @通过一个专门的业务处理类:处理微博业务细节 说明: 业务:加载新的微博首页数据 实现:给新浪服务器发送一个GET请求 业务:加载更多的首页微博数据 实现1:给新浪服务器发送一个GET请求 实现2:去沙盒中加载以前离线缓存的微博数据  二.实现 1.新建一个微博业务处理类,继承自NSObject 微博业务处理

iOS开发项目篇—34获取用户信息

iOS开发项目篇—34获取用户信息 一.简单说明 需求:获取当前用户的昵称 ,需要获取当前登录用户的个人信息. 查看接口 要求传递的参数 这里要获取的时用户的昵称(所以使用用户id作为参数传入) 二.实现代码 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 //设置导航栏内容 6 [self setupNavBar]; 7 8 //集成刷新控件 9 [self setupRefresh]; 10 11 //设置用户的昵称为标题 12 [s

iOS开发项目篇—39获取用户未读的微博信息(信息提醒)

iOS开发项目篇—39获取用户未读的微博信息(信息提醒) 一.简单说明 1.实现效果       2.实现 (1)新建一个类,封装请求 查看新浪官方要求的请求参数 该类中的代码设计 YYUnreadCountParam.h文件 1 // YYUnreadCountParam.h 2 //封装请求参数的类 3 4 #import "YYBaseParam.h" 5 6 @interface YYUnreadCountParam : YYBaseParam 7 /**uid true in

iOS开发项目篇—41cell的frame的细节处理

iOS开发项目篇—41cell的frame的细节处理 一.简单说明 在首页控制器中使用自定义的UITableViewcell 代码如下: YYHomeTableViewController.m文件 1 // 2 // YYHomeTableViewController.m 3 // 4 5 #import "YYHomeTableViewController.h" 6 #import "YYOneViewController.h" 7 #import "Y

iOS开发项目篇—35封装网络请求

iOS开发项目篇—35封装网络请求 一.简单说明 1.分析项目对网路请求(AFN框架)的依赖 项目中,多个控制器都使用了AFN框架发送网络请求,如果AFN2.0存在重大BUg,或者是升级至3.0版本,那么对于整个项目都是及其危险的,所有用到AFN的地方都需要做出相应的修改. 另外,如果现在要求不再使用AFN框架,而是使用一个新的框架,那么有关AFN的依赖所关联的所有代码都需要重新来过. 如果把afn这个第三方框架从项目中删除的话,那么项目就相当于作废了,这就是项目对第三方框架的强依赖的体现. 说

iOS开发项目篇—31提示最新微博数

iOS开发项目篇—31提示最新微博数 一.简单说明 1.导入图片素材 2.关于提示条的位置分析 原本的显示情况: 说明:滚动tableView对它没有任何的影响,可以知道提示条的父控件不应该是tableView 加入提示条之后的情况:     解决方案: 说明: (1)导航条是导航控制器的view子控件,可以把提示条添加到导航控制器的view上,当刷新的时候,有view调整提示条的位置. (2)关于改变y的值以及transform的选择,如果是动画执行完成之后需要回复到以前的位置,那么建议使用t

iOS开发项目篇—24字典转模型

iOS开发项目篇—24字典转模型 一.直接使用字典转模型 1.微博数据转模型示意图: 2.字典转模型 查询字段: 新建需要的数据模型: 字典转模型相关的代码: YYUserModel.h文件 1 // 2 // YYUserModel.h 3 // 4 5 #import <Foundation/Foundation.h> 6 7 @interface YYUserModel : NSObject 8 9 /** string 友好显示名称*/ 10 @property(nonatomic,c

iOS开发项目篇—25字典转模型第三方框架、运行时机制简介

iOS开发项目篇—25字典转模型第三方框架.运行时机制简介 一.使用第三方框架完成字典转模型 1.获取框架 在www.code4app.com网站中,搜索字典转模型 可以点击下载代码进行下载,也可以带github上去下载. 管理框架的好处:点击刷新按钮会刷新所有的项目. 2.使用 1.导入第三方框架 2.使用示例 错误提示: 在刷新的时候直接使用一行代码即可: 1 /**加载最新微博数据*/ 2 -(void)loadNewStatus 3 { 4 //1.获得请求管理者 5 AFHTTPReq