AJ分享,必须精品

效果:

制作过程

首先是帮助按钮那个地方的点击。

这里是用点击跳转的用的是 NJSettingArrowItem,前面的设置的,从字典通过模型转过来的。

  // 分享
NJSettingArrowItem *share = [[NJSettingArrowItem alloc ]initWithIcon:@"MoreShare" title:@"分享" destClass:[NJShareViewController class]];

帮助界面

帮助界面其实是一个tableView,然后字典转模型,运用模型helps来设置cell

代码:


@interface NJHelpViewController ()
/**
* 保存所有的json对象
*/
@property (nonatomic, strong) NSArray *helps;
@end @implementation NJHelpViewController #pragma mark - 懒加载
- (NSArray *)helps
{
if (_helps == nil) { NSString *path = [[NSBundle mainBundle] pathForResource:@"help.json" ofType:nil]; NSData *data = [NSData dataWithContentsOfFile:path]; NSArray *dictArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:NULL]; NSMutableArray *models = [[NSMutableArray alloc] initWithCapacity:dictArray.count]; for (NSDictionary *dict in dictArray) {
NJHelp *help = [NJHelp helpWithDict:dict];
[models addObject:help];
}
_helps = models;
}
return _helps;
} - (void)viewDidLoad
{
[super viewDidLoad]; // 定义数组保存创建好的item模型
NSMutableArray *items = [NSMutableArray arrayWithCapacity:self.helps.count]; // 根据我们通过json创建的对象创建item
for (NJHelp *help in self.helps) {
NJSettingItem *item = [[NJSettingArrowItem alloc]initWithIcon:nil title:help.title destClass:nil];
[items addObject:item];
}
// 创建分组
NJSettingGroup *group = [[NJSettingGroup alloc] init];
// 将所有的item赋值给分组items
group.items = items;
[self.datas addObject:group]; } // 条目点击事件
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// 1.创建目标控制器
NJHtmlViewController *htmlVc = [[NJHtmlViewController alloc] init];
// 1.2传递要显示的html的名称
// htmlVc.html = [self.helps[indexPath.row] html];
htmlVc.helpModel = self.helps[indexPath.row];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:htmlVc]; // 2.以模态的形式展示目标控制器
[self presentViewController:nav animated:YES completion:^{ }];
} @end

进入时展示的内容


这里其实是根据上一步的点击事件

条目点击事件
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

来确定用哪一个html网页文件。

点击条目跳转 到固定问题

这里用到了javascript的一点小代码,当点击时候自己跳转

网页加载完毕之后调用这个代码其中self.helpModel.tagId是我们定义的模型中的id,也就是想要跳转到得标签的id。

//设置代理
webView.delegate = self;
#pragma mark - UIWebViewDelegate
// 网页加载完毕之后调用
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// NSLog(@"webViewDidFinishLoad");
// 当网页加载完毕之后执行javascript代码,跳转到对应的位置 // 1.生成对应的javascript代码
NSString *jsStr = [NSString stringWithFormat:@"window.location.href = '#%@';", self.helpModel.tagId];
[webView stringByEvaluatingJavaScriptFromString:jsStr];
}

设置标题和关闭按钮

// -1 设置标题
self.title = self.helpModel.title; // 0. 添加关闭按钮
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"关闭" style:UIBarButtonItemStylePlain target:self action:@selector(closeVc)];

UIWebView的使用

self.helpModel是我们自己的模型
而使用UIWebView主要就是这几部了

1.获得网页的全路径:

 NSString *path = [[NSBundle mainBundle] pathForResource:(NSString *) ofType:(NSString *)]

2.根据全路径创建url:

NSString *path = [[NSBundle mainBundle] pathForResource:(NSString *) ofType:(NSString *)]

3.根据url创建request :

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:(NSURL *)];

4.加载本地的网页 :

 [webView loadRequest:(NSURLRequest *)];
    // 利用自定义的webview加载网页
UIWebView *webView = (UIWebView *)self.view; // 1.获得网页的全路径
NSString *path = [[NSBundle mainBundle] pathForResource:self.helpModel.html ofType:nil];
// 2.根据全路径创建url
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
// 3.根据url创建request
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
// 4.加载本地的网页
[webView loadRequest:request];

AJ学IOS(47)之网易彩票帮助界面UIWebView的运用的更多相关文章

  1. AJ学IOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController

    AJ分享,必须精品 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封 ...

  2. AJ学IOS(13)UI之UITableView学习(下)汽车名牌带右侧索引

    AJ分享,必须精品 先看效果图 代码 ViewController #import "NYViewController.h" #import "NYCarGroup.h& ...

  3. AJ学IOS(44)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配

    AJ分享,必须精品 效果: 注意图里面了吗,其实那个效果做起来真的很简单,在iOS中苹果给我们封装的很好,关键是那个按钮 系统的按钮的图片是在左边的,这里我们需要把他调整到右边,然后呢需要我们自己做一 ...

  4. AJ学IOS(46)之网易彩票幸运大转盘

    AJ分享,必须精品 效果 实现过程: 基础UI搭建 这里主要是用了xib搭建,首先我们分析,有中间的开始按钮,背景图片,还有星座按钮,这里能用xib做的事开始按钮和背景图片. 如图: 星座按钮的搭建: ...

  5. AJ学IOS(43)之网易彩票底部自定义TabBar实现切换

    AJ分享,必须精品 效果: 代码: NYTabBarController // // NYTabBarController.m // 彩票lottery // // Created by apple ...

  6. AJ学IOS(42)UI之核心动画CAAnimationGroup以及其他

    AJ分享,必须精品 效果: 代码: 很简单,不多说,就是把一堆动画放一起,看代码. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent * ...

  7. AJ学IOS 之微博项目实战(1)微博主框架-子控制器的添加

    AJ分享,必须精品 一:简单介绍 这是新浪微博的iOS端项目,来自于黑马的一个实战项目. 主要分成五大模块,本次全部运用纯代码实现,其中会用到很多前面学过得内容,如果有的地方有重复的知识点,说明这个知 ...

  8. AJ学IOS(56)网络基础以及如何搭建服务器

    AJ分享,必须精品 一:为什么要学习网络编程 关于这个问题,为什么要学习网络编程,AJ的理解就是,这东西是时代发展的必要,没什么为什么,就是应该学,除非你就是想玩单机,但是就算是单机也会有购买金币之类 ...

  9. AJ学IOS(55)多线程网络之图片下载框架之SDWebImage

    AJ分享,必须精品 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsO ...

随机推荐

  1. 一道值得思考的fork()面试题

    程序如下,判断输出多少个'_' ./a.out int main(){ ; i < ; ++i){ fork(); printf("_"); } } 熟悉fork的话,这里很 ...

  2. Dapper操作MySQL数据库获取JSON数据中文乱码

    前言 在项目中利用Dapper将JSON数据存储到MySQL数据库,结果发现JSON数据中的中文乱码,特此记录,希望对存储JSON的童鞋能有所帮助,文中若有错误之处,还望批评指正. Dapper获取J ...

  3. Java日期处理易踩的十个坑

    前言 整理了Java日期处理的十个坑,希望对大家有帮助. 一.用Calendar设置时间的坑 反例: Calendar c = Calendar.getInstance(); c.set(Calend ...

  4. CF1324C Frog Jumps 题解

    原题链接 简要题意: 现在河面上有 \(n+2\) 块石头,编号 \(0\) 到 \(n+1\),\(1\)~\(n\) 块石头每块上有一个方向,如果是 \(L\),那么青蛙到这块石头上之后只能往左跳 ...

  5. c++ 的vector sort遇到栈错误

    在做pat乙级1082 射击比赛时 遇到了sort 段错误. 题目链接:https://www.patest.cn/contests/pat-b-practise/1082 感觉写的没啥毛病 但就是段 ...

  6. vue cli3配置开发环境、测试环境、生产(线上)环境

    cli3创建vue项目是精简版的少了build和config这2个文件,所以配置开发环境.测试环境.生产环境的话需要自己创建env文件. 需要注意2点: 1.cli2创建项目生成的config文件里的 ...

  7. mysql事务提交和回滚机制

    应用场景:   银行取钱,从ATM机取钱,分为以下几个步骤       1 登陆ATM机,输入密码:    2 连接数据库,验证密码:    3 验证成功,获得用户信息,比如存款余额等:    4 用 ...

  8. 使用Keras进行深度学习:(一)Keras 入门

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! Keras是Python中以CNTK.Tensorflow或者Th ...

  9. 初始化一个vue项目

    1.安装node 端开发框架和环境都是需要 Node.js ,先安装node.js开发环境,vue的运行是要依赖于node的npm的管理工具来实现,下载https://nodejs.org/en/,安 ...

  10. Codeforces 1329C - Drazil Likes Heap(堆+贪心)

    题目链接 题意 给出一个高度为 h 的大根堆, 要求弹出其中若干个数后高度变为 g, 并且前后大根堆都是满二叉树. 问新的大根堆所有数之和的最小值, 并要给出一种弹出数的操作序列(节点序号). h, ...