@qiaobaBoss
2016-09-13T07:50:49.000000Z
字数 6581
阅读 497
本文档主要介绍苹果手机版心专医患者端的部分模块功能和相关工具接口以及使用方法。
文档目前仅主要涉及Created by 张双义和Created by 夜雨的类别。
网络请求的管理类 XZYAFManager 是一个单例类,创建方式如下:
XZYAFManager *manager = [XZYAFManager sharedManager];
目前提供的网络请求接口有三种均为post类型方式,方法参数说明可见具体代码 .h 页面的方法说明。
网络请求接口:
//用于请求data类型数据- (void)POSTData:(NSString *)URLStringparameters:(id)parameterssuccess:(AFSuccessBlock)successfailure:(AFFailureBlock)failure;//最常用普通post请求方法- (void)POSTReorganize:(NSString *)URLStringparameters:(id)parameterssuccess:(void (^)(id responseObject))successfailure:(void (^)())failure;//用于上传data数据- (void)POSTReorganize:(NSString *)URLStringparameters:(id)parametersconstructingBodyWithBlock:(AFMultipartBlock)blocksuccess:(void (^)(id responseObject))successfailure:(void (^)())failure;
三种请求方式内部均自动处理了 session过期 的问题,并打印了初步的错误信息,开发者可自行选择。其中,除 POSTData:url parameters:param success:block1 failure:block2 方法,其他两个请求方式如果返回数据解析失败,默认自动使用 POSTData: 方法重新请求。
注: 调试接口时 POSTReorganize: 也有可能会接收到data类型的返回结果,请切换 POSTData: 方法或与后台协商解决。
网络请求事例:
XZYAFManager *manager = [XZYAFManager sharedManager];[manager POSTReorganize parameters:param success:^(NSURLSessionDataTask *task, id responseObject) {for (NSDictionary *dict in responseObject) {ForumModularModel *model = [ForumModularModel creatFromDictionary:dict];[_modularArray addObject:model];}[self makePageViewController];} failure:^(NSURLSessionDataTask *task, NSError *error) {ShowMessage(@"数据加载失败,请检查网络后重新尝试");NSLog(@"数据加载失败,error:%@",error);}];
用户管理类 XZYUserManager 是一个单例类,用于管理用户的登录信息和登录状态
//主动登陆:帐号、密码、回调block- (void)loginUser:(NSString *)userAccount passWord:(NSString *)passWord compont:(UserLoginCompont)compont;
- (void)autoLoginCompont:(UserLoginCompont)compont;
其中 compont 登录为回调 typedef void(^UserLoginCompont)(NSString *infoMsg, XZYUser *user);
XZYUser *user = [XZYUserManager sharedManager].currentUser;
/*** 更新用户信息 同步刷新所有关联控件*/- (void)updateUserWithInfo:(NSDictionary *)userInfo;/*** 保存本地用户信息 只刷新数据*/- (void)saveLocalUserInfo:(NSDictionary *)userInfo;
前者刷新本地用户数据,并会同步通知所有监测用户信息变化的代理以便刷新见面元素。
XZYUserManagerDelegate 协议并通过 XZYUserManager 的两个管理方法维护自身状态。
- (void)addDelegate:(id<XZYUserManagerDelegate>)delegate;- (void)removeDelegate:(id<XZYUserManagerDelegate>)delegate;
注:addDelegate 将会强引用代理对象,注意在合适的时机调用 removeDelegate 方法。
- 注销用户
注销登录后用户将不再接收服务器的推送信息,并会删除本地保留的用户信息,下次登录需要手动输入用户帐户密码。
键盘管理类 XZYKeboardManager 为单例类,键盘监测需要遵守 XZYKeboardManagerDelegate 协议,并通过 XZYKeboardManager 的管理方法维护自身状态。
- (void)addDelegate:(id<XZYKeboardManagerDelegate>)delegate;- (void)removeDelegate:(id<XZYKeboardManagerDelegate>)delegate;
注:addDelegate 将会强引用代理对象,注意在合适的时机调用 removeDelegate 方法。
XZYKeboardManagerDelegate 协议
协议提供了4个方法,但目前验证最安全方法为:
//键盘状态变化(包括弹出和收起)
- (void)keboardStateChange:(CGRect)keyboardBounds duration:(NSNumber *)duration isShow:(BOOL)isShow;
其中 keyboardBounds 为键盘的frame,duration 表示键盘变化的时间,isShow 来判断“弹出”|“收起”
缓存管理 XZYCatchManager 同样是一个单例类,用于管理一些需要进行异步缓冲和本地缓存的数据信息
XZYBufferWork类用于创建缓冲缓存任务交由XZYCatchManager管理,目前仅用于缓冲缓存录音相关文件
个人信息为 我 模块,提供个人相关的各项功能:
功能:
个人信息编辑页面用来修改个人的身份信息。
家庭成员模块用于展示、管理患者的家庭成员,主界面为 MyFamilyVC。
| 相关界面 | 功能介绍 |
|---|---|
| MyFamilyEditVC | 家庭成员新增、编辑 |
| FamilyHealthEditVC | 家庭成员健康信息展示 |
| PatientHealthBaseVC | 病人健康信息展示(与患者通用) |
查看关联医生信息,与关联医生交流,主界面:MyDoctorViewController
| 相关界面 | 功能介绍 |
|---|---|
| MyDoctorViewController | 基础页面,展示关联医生列表 |
| NIMMyDoctorChatVC | 基于网易云信的医患交流页面 |
| MyDoctorDetailVC | 通用的医生详情页面,展示医生详情 |
| MyDoctorAdviceVC | 我的医生临床指导列表页 |
| DoctorTeamInfoViewController | 医生团队详情 |
个人健康查看、编辑,主界面:PatientHealthBaseVC
| 相关界面 | 功能介绍 |
|---|---|
| PatientHealthBaseVC | 基础页面,展示患者健康记录 |
| PatientHealthDetailListVC | 患者指定类型的健康信息列表 |
| PatientHealthInfoEditVC | 健康信息新增、编辑页面 |
PatientHealthBaseVC 是患者端通用的健康档案界面, 上层界面需要选择 infoSourceType 和 传人 patient|familyMember 中的一个来改变呈现的界面内容。
对应参数类型见 PatientHealthBaseVC.h。
页面 MyBillViewController 用与显示用户的交易记录,目前仅显示了线上交易的内容。
| 相关界面 | 功能介绍 |
|---|---|
| MySetViewController | 基础页面跳转功能界面,注销用户 |
| MeChangePasswordVC | 修改用户登录密码 |
| MeChangePhoneVC | 修改用户的关联手机 |
| MyQrcodeViewController | 显示用户二维码,跳转扫描页面 |
| QrcodeReadVC | 二维码扫描界面,扫描关联医生 |
提供会员信息介绍,可开通会员和续费会员 ,页面 VIPViewController。
入口:[我] 界面 - 头部信息栏 -[开通会员](已开通则显示为对应会员等级)。
显示版本信息、公司信息,log等,页面 AboutXinZY。
健康社区是一个供患者之间交流的论坛,患者可在此发帖、回帖,浏览、点赞。
基础页面:ForumBasViewController
ForumBasViewController 主要包含一个
XZYPageViewController, 提供一个带 titleBar 的viewcontroller容器。所有社区帖子按分类被包含在pageViewController中,每个分类对应一个ForumPostListViewController,ForumPostListViewController之间可左右滑动切换。
列表页面:ForumPostListViewController
ForumPostListViewController 是通用的展示帖子页面,包含属性:
相关属性 类别 作用 forumModular ForumModularModel 加载帖子的所属栏目 modularType ForumModularType 加载帖子的所属类型 parentVC UIViewController 父Controller,用于界面切换
页面: ForumManagerViewController
结构 与 ForumBasViewController 类似,
用来查看患者的 发帖 和 回帖 记录。
发帖界面:QAddPostVC
发帖需要选择发帖栏目,所以上层界面需确保栏目类型已加载成功。
发帖可添加图片,图片类型的帖子需要在后台审核,
尚未通过审核的帖子可在[管理中心]-[我的发帖]中可见
文字帖子,和通过审核的帖子在[健康社区]对应栏目下可见
回帖需要点击要恢复的帖子,进入
QPostDetailVC详情页面
点击详情界面下方输入框可对帖子进行回复留言,点击回复记录可回复该回帖
回帖只能回复文字内容
点赞
点击帖子列表对应帖子记录左下角的[点赞]小手按钮 可对帖子点赞
点赞成功后点赞按钮会亮起,再次点击可取消点赞
阅读量
阅读量为帖子被阅读的次数,每次在帖子详情被查看时向服务器发送请求+1。
约定的帖子排序方式为阅读量排序,但是具体排序由后台来决定。
周边医院提供当前地理位置周边的医院信息,点击医院可拨打咨询电话或查看地图导航。
地图借助了 百度地图SDK ,封装工具类为 BaiDuMapTools
BaiDuMapTools 是一个工具类,提供公共的类方法.
/*** 返回弹出的泡泡view ---- annotation/tagIndex ---- nil*/+ (UIView *)getAttPaopao:(id< BMKAnnotation>)annotation target:(id)target action:(SEL)action;
- (void)addAnnotations:(NSArray *)annotations;
向地图窗口添加一组标注,需要实现 BMKMapViewDelegate 的 -mapView:viewForAnnotation: 函数来生成标注对应的View
/***根据anntation生成对应的View*@param mapView 地图View*@param annotation 指定的标注*@return 生成的标注View*/- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation;
BMKAnnotationView,返回前设置其图片即可:
//标注点的图片- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation{.....annotationView.image = [UIImage imageNamed:@"icon_mark"];return annotationView;}
点击搜索出的附近医院标注将弹出医院信息,点击[路线]按钮可跳转至导航页面 RouteSearchVC ,如下:
//查询路线- (void)searchLine:(UIButton *)button{//给泡泡设置了tage = _hospArray.countBMKPointAnnotation* item = _hospArray[button.superview.tag-1];RouteSearchVC *routVC = [[RouteSearchVC alloc] init];routVC.startNode = [[BMKPlanNode alloc] init];routVC.startNode.pt = _userLocation.location.coordinate;routVC.endNode = [[BMKPlanNode alloc] init];routVC.endNode.pt = item.coordinate;routVC.userLocation = _userLocation;routVC.hospAnnotion = item;[self.navigationController pushViewController:routVC animated:YES];}
注: 导航方式有三种,默认选择汽车。当两天距离过于接近时,无法提供公交导航。
App 中需要在所有的网络请求头中添加 isEocd 字段,并设值为1
[sessionManager.requestSerializer setValue:@"1" forHTTPHeaderField:@"isEocd"];
部分需要验证session的网络接口,后台会自动验证当前请求的session信息是否过期如果过期会在返回的错误信息里附带错误码,对比错误码:
if (ERROR_OUTSESSION == stateCode){}
任何疑问可联系邮箱: 273019468@qq.com