iOS开发 - 第05篇 - 项目 - 04 - OAuth授权 & 首页

1、存储帐号信息

1.1 基本实现

由于一旦授权成功,新浪返回的accessToken是同一个值(针对同一个第三方应用,同一个账号),为避免每次都重新登录,应该讲accessToken存储起来。

实现:先检测沙盒里面是否存在accessToken,若无,则意味从来没有登陆过,加载登录界面,一旦成功登录,就将获得的accessToken存进沙盒,下次进来就不需要再进行登录,直接从沙盒中取出accessToken,进入首页,获取用户数据。

1>在发送请求,成功获取accessToken方法后,将返回的JSON(AFN自动解析成字典),字典保存到沙盒中

2>在程序运行的时候,根据是否存在上述保存的帐号信息,判断是否需要登录界面

3> 在手机开发中,授权成功后的回调地址一般是不需要的,需要拦截网络请求,在UIWebView代理方法中拦截,即在获取利用code获取accessToken方法之后,禁止加载回调地址

4>授权成功后,切换窗口根控制器为WBTabBarViewController或者新特性控制器(第一次登陆)

1.2 存在问题

1> 上述代码很多和appDelegate中的代码重复

2> 代码不严谨,还没有判断accessToken是否已经过期

3> 上述保存的帐号信息,均是直接对字典进行操作,需要通过key去取值,需要封装成模型

1.3 添加帐号模型

1> 根据access_token、expires_in、uid,添加帐号字典,并提供类方法,字典转模型

2> 将请求成功后返回的字典,转成模型,再存入沙盒

3>在程序运行时,判断沙盒中是否存在帐号信息,取出模型

4>
注:自定义对象需要存入沙盒、从沙盒中取出,需要遵循NSCoding协议!!!

5>在网络请求的时候添加蒙版MBProgressHUD

并且在请求成功/失败获取accessToken后隐藏。

2、封装帐号存储

专门对帐号模型的保存、获取进行封装,处理帐号相关业务

注:在帐号模型中添加获取accessToken的时间,用于判断以后accessToken是否过期

3、封装控制器切换

1.2节中已经指出,上述代码在授权成功切换控制器和程序运行切换控制器中的代码存在很多重复,需要将代码抽取出来,将切换控制器封装到UIWindow的分类当中。

注:使用的是对象方法,对UIWindow对象进行操作

4、首页 - 获得用户昵称

使用Foundation+Log,查看打印数据。

注1:需要将昵称储存,在设置- (void)setupNav方法中,先取出沙盒中的昵称,再去发网络请求,看昵称是否改变,存储到HWAccount模型中

注2:HWAccount中的存储时间不应该放在HWAccountTool的

+(void)saveAccount:(HWAccount *)account方法中,而应该放在字典转模型

+(instancetype)accountWithDict:(NSDictionary *)dict方法中

注3:encodeWithCoder;initWithCoder两个方法中也要写昵称属性

5、首页 - 封装标题按钮

5.1 使用imageEdgeInsets、 titleEdgeInsets说明

注1:首页导航栏的titleView中文字和图片的间距,不能用UIEdgeInsetsMake固定死,因为用户的昵称会改变,文字的长度也会改变

注2:什么情况下建议使用imageEdgeInsets、titleEdgeInsets

如果按钮内部的图片、文字固定,用这2个属性来设置间距,会比较简单

标题宽度(乘上scale系数,保证retina屏幕上的图片宽度是正确的)

CGFloattitleW = titleButton.titleLabel.width * [UIScreen mainScreen].scale;

CGFloatimageW = titleButton.imageView.width * [UIScreen mainScreen].scale;

CGFloatleft = titleW + imageW;

titleButton.imageEdgeInsets= UIEdgeInsetsMake(0, left, 0, 0);

5.2 自定义HWTitleButton

注1:在这里只需要修改文字和图片的x即可!

注2:下面的方法会引发死循环

此时在HWHomeViewController的setupNav方法中只需要这么做即可

6、加载微博数据

注:使用SDWebImage需要对内存警告做处理

7、微博数据 - 字典转模型

7.1 基本实现

1> HWUser

2> HWStatus

3>在HWHomeViewController中对网络返回的字典转换成模型数组,并在tableView代理方法中使用模型

4>在setupUserInfo方法中获取用户昵称也使用用户模型

7.2 MJExtension框架 --- 重要

问题:上述字典转模型的方法比较繁琐,而且又有模型嵌套。

解决方法:利用MJExtension框架(底层用runtime实现),可以快速实现字典/模型相互转换,还可以实现字典数组直接转模型数组等很多快捷功能!!!

1> 导入框架

2> 删除原先的字典转模型方法

3>修改如下

8、下拉刷新

UIRefreshControl– 下拉刷新控件

时间: 2024-08-06 17:59:25

iOS开发 - 第05篇 - 项目 - 04 - OAuth授权 & 首页的相关文章

iOS开发 - 第05篇 - 项目 - 03 - 版本新特性 & OAuth授权

1.版本新特性 1.1 界面 程序第一次启动的时候会弹出新特性界面,之后启动不会出现. 1.2 实现思路 1> 新建一个HWNewfeatureViewController(继承自UIViewController) 2> 先将其设置为整个程序的根控制器,用于演示 3> 使用UIScrollView 4>添加UIPageControl 5> 设置UIScrollView代理,监听滚动,设置UIPageControl 2.控制器切换 2.1 一个View中显示其他控制器的View

iOS开发 - 第05篇 - 项目 - 11 - const & git & 项目重构

1.发微博键盘最近标签页完善 问题: 1>表情出现重复 2>其他标签页转换到最近标签也没有及时出现最新使用表情 1.1 表情实时刷新 方法一:切换到最近标签页,刷新最新使用表情 注:需要在listView中表情数组的setter方法中先移除之前的控件,并在最后[selfsetNeedsLayout]; 方法二:上述方法只能在其他标签页切换到最近标签页的时候刷新表情,若在最近页需要点击表情按钮立即刷新,需要监听表情按钮点击的通知 1.2 表情重复问题 在表情工具类,存储表情的时候增加判断,删除重

iOS开发 - 第05篇 - 项目 - 10 - 发微博

1.点击表情 1.1 表情放大界面 1.2 实现思路 1>监听表情按钮点击 2>同一时间只能显示一个放大镜,创建一个即可,不用重复创建 3>放大镜应该作为一个整体HWEmotionPopView,而且比较简单,用XIB来实现即可,提供类方法 4>在HWEmotionPageView中懒加载HWEmotionPopView 注1:HWEmotionPopView添加位置问题,若添加在HWEmotionPageView上面,则会被上面工具台挡住,因此,应该添加到最上面的窗口UIWind

iOS开发 - 第05篇 - 项目 - 12 - 图文混排

1.首页微博文字处理 对于之前微博项目中首页:微博文字中的用户名.话题.链接等文字需要高亮显示,表情字符串需要显示对应表情. 思路: 1>之前微博中的文字使用NSString,要达到不同文字的高亮显示,需要使用NSAttributedString 2>微博模型中增加一个属性,代表属性字符串 /** string     微博信息内容*/ @property(nonatomic, copy) NSString *text; /** string     微博信息内容 -- 带有属性的(特殊文字会

iOS开发 - 第05篇 - 项目 - 01 - 搭建框架

实现:仿新浪微博 1.项目配置 1> 取消横竖屏 2> 设置图标和启动图片 3> 删除MainStoryboard,全部代码创建 2.添加TabBarController 2.1 创建窗口 1>在didFinishLaunchingWithOptions方法中,创建窗口,设置根控制器,显示窗口 2> 添加TabBarController的子控制器 3>抽取重复代码 注:上述方法限制每次创建的都是UIViewController,实际使用中,需要设置不同的控制器作为Tab

iOS开发 - 第05篇 - 项目 - 02 - 导航栏

1.Debug下NSLog 2.Xcode图片拉伸 直接选中图片,在右侧属性中设置即可,避免代码拉伸. 3.添加搜索框 在发现控制器的导航栏中添加一个搜索框. 3.1 通过UISearchBar 系统自带的UISearchBar并不好用,不能改变其高度. 3.2 通过UITextField 3.3 自定义搜索框 注:由于上述创建搜索框控件在其他地方也有可能用得上,因此最好将其抽取出来,自定义一个搜索框控件 4.弹出下拉菜单 4.1 界面 4.2 设置导航栏的titleView 注1:设置UIBu

iOS开发 - 第05篇 - 项目 - 05 - 首页

1.下拉刷新 1.1 进入首页自动刷新 1.2 显示最新微博数量 注:弹出的UILabel应该添加到导航控制器的View上,而不应该添加到tableView上,否则会更随tableView一起滚动!!! 在发送请求成功后,调用下面方法(注意动画): 2.添加上拉刷新控件 1> 自定义HWLoadMoreFooter(XIB) 1. UILabel利用autoLayout填充View 2.添加转圈控件,勾选动画 2>提供类方法加载XIB控件 3> 添加到tableView的tableFoo

iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)

iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController) 前面我们介绍了StoryBoard这个新技术,和纯技术编程的代码创建界面,本篇我们将介绍一个老的技术,但是在很多的公司或者库里面还是使用这个技术,既然如此它肯定有他的好处,至于好处这里我就不一一介绍了.在Xcode5之前是只能使用Xib或者代码的,而代码又对于很多初学者来说算是一个难题.毕竟不知道怎么下手.所以我就总结了一下这段时间自己编写程序的一个实例来说明怎么

iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController) 这里我们就直接上实例: 一:新建一个项目singleView Controller,命名未iCocos 二:由于我们使用的纯代码实现的,所以删除其中的StoryBoard和Viewtroller的两个文件 三:新建一个继承自TabBar Controller的类,我们命名问iCocos ViewController 三:在Appdelegate的实现文件中导入刚刚