iOS开发——实战技术OC篇&应用帮助界面简单实现

应用帮助界面简单实现

有的时候我们可能遇到一些关于应用中的技术或者信息不够明确,所以在使用应用的时候可能会遇到一些不知道所措的情况,比如关于一些难一点的游戏应用的操作,关于应用中一些比较隐藏的功能疑惑是操作完成后需要用户去根据需求做其他相应操作的的功能,所以这里我们就实现一个简单的帮组界面,也许跟实际开发中有一些区别,但是思路理解基本上就没有什么问题了。

我们知道平时帮助界面来说,可能是使用一个掩饰案例,可能是网络连接,也能是说明文档,这里我们就简单一点使用网页结合JSON数据来实现,网页实现也是使用最多的方法。

1:先来看简单的JSON数据格式

2:然后就是网页对应显示数据的格式

3:首先新建一个模型类用来加载对应网页信息(这里是根据网页中相应信息来创建的):

声明模型属性和对应的模型方法

 1 @property (nonatomic, copy) NSString *title; /**< 标题 */
 2
 3
 4
 5 @property (nonatomic, copy) NSString *html; /**< 网页文件名 */
 6
 7
 8
 9 @property (nonatomic, copy) NSString *ID; /**< id */
10
11
12
13
14
15 -(instancetype)initWithDict:(NSDictionary *)dict;
16
17 +(instancetype)helpWithDict:(NSDictionary *)dict;

实现模型方法

 1 -(instancetype)initWithDict:(NSDictionary *)dict{
 2
 3     if (self = [super init]) {
 4
 5         //获取key设置
 6
 7         self.title = dict[@"title"];
 8
 9         self.html = dict[@"html"];
10
11         self.ID = dict[@"id"];
12
13     }
14
15
16
17     return self;
18
19 }
20
21 +(instancetype)helpWithDict:(NSDictionary *)dict{
22
23     return [[self alloc] initWithDict:dict];
24
25 }
26
27  

4:由于使用到了JSON数据,这里同样需要实现JSON数据的加载和序列化,

创建一个可变数据用来存放解析后的JSON数据

1 @property (nonatomic, strong) NSMutableArray *helps; /**< 数据源 */

懒加载数组,从Bundle中获取JSON文件并且解析出来放到可变数组中

 1 -(NSMutableArray *)helps{
 2
 3     if (!_helps) {
 4
 5         _helps = [NSMutableArray array];
 6
 7
 8
 9         // 1.把help.json数据转成模型,添加到数组
10
11         // 1.1获取help.json二进制数据
12
13         NSURL *jsonFilePath = [[NSBundle mainBundle] URLForResource:@"help.json" withExtension:nil];
14
15         NSData *data = [NSData dataWithContentsOfURL:jsonFilePath];
16
17
18
19         // 1.2把二进制转成数组
20
21         // NSJSONSerialization json 序列化:把json字符串转成对象
22
23         id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
24
25         // 为安全
26
27         if ([obj isKindOfClass:[NSArray class]]) {
28
29             for (NSDictionary *helpDict in obj) {
30
31                 // 把字典转模型
32
33                 iCocosHelp *help = [iCocosHelp helpWithDict:helpDict];
34
35                 [_helps addObject:help];
36
37             }
38
39         }
40
41
42
43     }
44
45
46
47     return _helps;
48
49 }

5:这里就不使用MVC了,直接使用模型加载,因为没有必要去自定义一个Cell(或者说我们在Cell中没有其他功能要实现,除了点击),如果还有其他功能需要实现或者拓展的建议结合MVC使用

所以我们就可以直接从存放解析出来的JSON数组中获取数据来现实到tableView中

 1 #pragma mark - Table view data source
 2
 3 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 4
 5 #warning Incomplete method implementation.
 6
 7     // Return the number of rows in the section.
 8
 9     return self.helps.count;
10
11 }
12
13
14
15
16
17 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
18
19
20
21     static NSString *ID = @"HelpCell";
22
23     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
24
25
26
27     if (!cell) {
28
29         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
30
31         // 显示箭头
32
33         cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
34
35     }
36
37
38
39     // 显示标题
40
41     iCocosHelp *help = self.helps[indexPath.row];
42
43     cell.textLabel.text = help.title;
44
45
46
47     return cell;
48
49 }
50
51  

到这里我们就可以看到一些简单的TableView数据了

6:然后就是点击对应的行显示对应的数据,这里由于我们使用的网页,所以需要新建一个UIView控制器来专门显示网页信息(那么你可能问为什么不新建一个网页控制呢,sorry,没有这个控制器),

在控制器中创建一个用来显示帮助页面的模型属性

1 @property (nonatomic, strong) XMGHelp *help; /**< <#属性名#> */

设置控制器对应的属性

 1  // 添加背景
 2
 3     self.view.backgroundColor = [UIColor whiteColor];
 4
 5
 6
 7     // 显示标题
 8
 9     self.title = self.help.title;
10
11  

在控制器的ViewDidLoad中创建一个UIWebView并且设置相应的属性,包括代理(后面会用到),然后添加到控制器的View上

 1     // 1.网页控件
 2
 3     UIWebView *webView = [[UIWebView alloc] init];
 4
 5
 6
 7     // 2.设置frm
 8
 9     webView.frame = self.view.bounds;
10
11
12
13     // 设置代理
14
15     webView.delegate = self;
16
17
18
19     // 3.添加webview
20
21     [self.view addSubview:webView];
22
23  

从Bundle众加载对应的的网页,并且加载到webView上面显示(这里设置到了UIWebView的使用,其实很简单,一般就是三行代码,或者还有一些简单的代理方法)

 1     // .显示网页
 2
 3     // 域名 对应 IP 地址
 4
 5     // weibo.com = 123.125.104.197
 6
 7     // http://weibo.com/login.php  远程路径
 8
 9     // 获取网页的 "本地路径"
10
11     NSURL *htmlURL = [[NSBundle mainBundle] URLForResource:self.help.html withExtension:nil];
12
13
14
15     // 让UIWebView直接访问 "网页文件"
16
17     NSURLRequest *request = [NSURLRequest requestWithURL:htmlURL];
18
19     [webView loadRequest:request];
20
21     

7:最后就是加载完成网页之后需要做一些相应的操作,那么什么操作呢?注意听了,这里才是重点,

由于可能我们不需要去实现每一个网页都需要点击对应的一行来实现显示,也就是说有些内容相似的可能会放到一个网页中去显示,所以这个时候我们点击对应的行系统默认是帮我们定位到最顶部,而我们需要实现的功能就是点击对应的行之后显示的网页要根据我们点击的行将行对应的网页信息置顶,这里就需要使用javascript相关知识,当然这里用到的连皮毛都不如,大致知道就可以了。

我们的混合网页中有一个标志符ID用来区别不同行对应的网页信息的,所以这里就使用这个ID来实现置顶(跳转)。

在网页加载完成的代码中去判断是否有这个ID,如果有就使用字符串拼接技术去生成javascript代码,然后使用系统为我们提供的方法(stringByEvaluatingJavaScriptFromString)去执行javascript,实现交互

 1 #pragma mark 整个网页加载完
 2
 3 -(void)webViewDidFinishLoad:(UIWebView *)webView{
 4
 5
 6
 7     // 有ID,才需要让网页 来到指定的位置
 8
 9     if (self.help.ID) {
10
11         NSString *js =  [NSString stringWithFormat:@"window.location.href = ‘#%@‘",self.help.ID];
12
13         NSLog(@"%@",js);
14
15
16
17         // 让网页执行 js代码
18
19         [webView stringByEvaluatingJavaScriptFromString:js];
20
21     }

这样就可以很简单的实现置顶效果

   

拓展:最后总结一些关于应用内部需要实现的其他技术,

有的时候我们可能还需要实现一些打电话或者对这个应用做相应的评论,其实也非常简单,一般这类的功能我们第一想到的都是单例UIApplication去实现

 1 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
 2
 3     if (indexPath.row == 0) {//跳转到appstore让用户去评分
 4
 5         // 网易彩票的appstore的(URL)地址是多少?
 6
 7         //https://itunes.apple.com/cn/app/id411654863?mt=8
 8
 9         NSString *openURL = @"http://itunes.apple.com/app/id411654863?mt=8";
10
11
12
13         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:openURL]];
14
15     }else{//拨打电话
16
17         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];
18
19     }
20
21 }
时间: 2024-10-12 19:51:42

iOS开发——实战技术OC篇&应用帮助界面简单实现的相关文章

iOS开发——实战技术OC篇&amp;关于蒙板和弹出菜单

关于蒙板和弹出菜单 一:关于蒙板 蒙板的作用一般就是用来实现不能做其他操作还有一些模糊效果提示用户 我们只需要自定义一个View,并且创建两个类方法用来给外界调用实现显示和隐藏 + (void)show; + (void)hide; 显示:直接添加到window上,并且设置和window同样大小,然后设置相应的透明度(alpla) 1 + (void)show 2 3 { 4 5 6 7 8 9 iCocosCover *cover = [[self alloc] init]; 10 11 12

iOS开发——实战技术OC篇&amp;产品推荐界面的实现

产品推荐界面的实现 目前很多公司都仅仅只有一个项目,所以他们关于其他的项目肯定会做相应的推广,而在APp内部使用产品推荐实现APP的推广使一种很常见的现象,因为不需要什么成本,所以今天就简单介绍一下这么去搭建一个简单的产品推荐界面. 本章重点: 1:使用JSON数据:将JSON数据序列化,然后显示到界面上 2:根据设备是否安装对应的应用显示不同的信息,比如图片 3:根据设备是否安装对应的应用点击对应的按钮实现不同的功能 好了下面就来看看关于产品推荐界面是怎么去实现的! 1:JSON数据 2:对应

iOS开发——实战技术OC篇&amp;点击状态栏ScrollView(包括子控件)自动滚到顶部

点击状态栏ScrollView(包括子控件)自动滚到顶部 其实这种方式我们平时见的还是比较多的,而且适合用户的需求,所以就搬来琢磨了一下,感觉效果还不错 这里就直接将解决思路一一写出来不将代码分段展示了,在代码中我加了详细的注释objective-c的套路和swift基本一样,在最后会将Swift和objective-c的代码一起放上,如果需要直接解决问题的童鞋可以直接将代码拷贝到工程里即可 首先创建一个topWindow继承至NSObject,这里我们考虑将这个功能完全封装起来,所以所有的方法

iOS开发——高级技术OC篇&amp;运行时(Runtime)机制

运行时(Runtime)机制 本文将会以笔者个人的小小研究为例总结一下关于iOS开发中运行时的使用和常用方法的介绍,关于跟多运行时相关技术请查看笔者之前写的运行时高级用法及相关语法或者查看响应官方文档. 下面就来看看什么是运行时,我们要怎么在iOS开发中去使用它. 官方介绍: 这里我们主要关注的是最后一种! 下面来看看Runtime的相关总结 #pragma mark 获取属性成员 /********************************************************

iOS开发——使用技术OC篇&amp;项目实战总结之开发技巧

项目实战总结之开发技巧 本文收集了25个关于可以提升程序性能的提示和技巧 1.使用ARC进行内存管理 2.在适当的情况下使用reuseIdentifier 3.尽可能将View设置为不透明(Opaque) 4.避免臃肿的XIBs 5.不要阻塞主线程 6.让图片的大小跟UIImageView一样 7.选择正确的集合 8.使用GZIP压缩 9.重用和延迟加载View 10.缓存.缓存.缓存 11.考虑绘制 12.处理内存警告 13.重用花销很大的对象 14.使用Sprite Sheets 15.避免

iOS开发——使用技术OC篇&amp;保存(获取)图片到(自定义)相册

保存(获取)图片到(自定义)相册 最近在学 iOS相关技术(绘图篇实现画板功能)的时候设计到了两个常用的知识点,那就是保存图片到相册和葱相册中获取图片. 只是个人比较好奇拓展一些技术,说的难听点叫做装牛角尖,好听点就是为了装逼而已,所以在保存相册的时候使用真及测试发现不能保存到我iPhone里 main的自定义相册里面,就查看文档和资料,也借鉴别人的分享实现了想要的功能,就把他给记录下来,这个虽然没有直接保存和获取常用但是也是一项很好的实用技术. 一:首先来看看怎么获取相册的图片: 1 // 弹

iOS开发——实战总结OC篇&amp;网易彩票开发知识点总结

网易彩票开发知识点总结 关于网易彩票开发中遇到了不少的坑,弄了好久才弄懂,或者有些犹豫很久没用就不记得了,所以这里就总结了一下,希望以后不会忘记,就算忘记也能快速查看! /***************************************&.设置状态栏样式(白色) 两种方法******************************************/ 1 -(UIStatusBarStyle)preferredStatusBarStyle 2 3 { 4 5 if ([sel

iOS开发——使用技术OC篇&amp;简单九宫格锁屏功能的实现与封装

简单九宫格锁屏功能的实现与封装 首先来看看最后的实现界面. 在这开始看下面的内容之前希望你能先大概思考活着回顾一下如果 你会怎么做,只要知道大概的思路就可以. 由于iphone5指纹解锁的实现是的这个功能呗淘汰,但是你可能会在想,都淘汰了你还在这里说个毛线啊,其实大家都知道,编程注重的思想,当然会了这个你不可能就会了指纹技术,哪还得等笔者在后面的学习中给大家分享,只是或许有一天这种功能或者思路在哪里要用到你不觉得是一件很开心的事情吗,而且如果你是不想自己敲的话直接可以拿来用. 好了不多废话直接上

iOS开发——使用技术OC篇&amp;剪切版的实现

剪切版的实现 在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享.比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容. 一.在iOS中下面三个控件,自身就有复制-粘贴的功能: 1.UITextView 2.UITextField 3.UIWebView 二.UIKit framework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板的功能. 1.UIPasteboard:我们可以向其中写入数据,也可以读取数据 2.UIMe