前几天写了android系统使用ichartjs简单实现移动端图表的例子,怎么能少了乔帮主的ios系统呢 实现效果更炫的ichartjs图表
我们来看看如何实现呢
同android系统一样 使用UIWebView就可以实现 ios对html5的支持也很完美
首先来看效果图
实现效果是首页面展示图标的列表 选择后进入图表详细 来展示本地的图标文件 即为html文件
用的是iphone的模拟器 ios的UIWebView缩放效果还是很不错的 可以自由的进行缩放
下面来看实现:
首先看下项目结构图
将html js文件放在资源文件包内 这里主要用到ichart-1.0.min.js
首界面ichartjsViewController 继承自UIViewController 使用UITableView 所以需要实现UITableViewDataSource, UITableViewDelegate 两个协议
初始化UITableView
tableViewMain = [[UITableView alloc] initWithFrame:CGRectMake(0, 50, 320, 420) style:UITableViewStyleGrouped]; // tableViewMain.style = UITableViewStyleGrouped; [tableViewMain setDelegate:self]; [tableViewMain setDataSource:self]; [self.view addSubview:tableViewMain];
因为这个只有一个分组 所以直接可以写死sectionName
- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return @"图表Demo"; } - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return dataArray.count; } - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier] autorelease]; } cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; cell.text = [dataArray objectAtIndex:indexPath.row ]; NSLog(@"cell value === %@",[dataArray objectAtIndex:indexPath.row ]); return cell; }
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
设置Cell的样式 显示详细点击按钮 点击事件代码如下
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{ DetailViewController *detailVC = [[DetailViewController alloc] init]; NSString *test = @"test"; if(indexPath.row == 0){ detailVC.charttype = 0; test = @"面积图报表"; } if(indexPath.row == 1){ detailVC.charttype = 1; test = @"柱状图报表"; } detailVC.navigationItem.title = test; [self.navigationController pushViewController:detailVC animated:YES]; }
detailVC.charttype = 0;
判定传递图表类型
图表展示界面 只需初始化UIWebView 并加载本地HTML即可 初始化代码如下//创建UIWebView UIWebView *WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)]; [WebView setUserInteractionEnabled:YES]; WebView.scalesPageToFit =YES; [WebView setBackgroundColor:[UIColor clearColor]]; [WebView setOpaque:NO];//使网页透明 WebView.delegate = self; if(charttype==0){ NSString *path = [[NSBundle mainBundle] pathForResource:@"mianji_chart.html" ofType:nil]; [WebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath: path]]]; }else{ NSString *path = [[NSBundle mainBundle] pathForResource:@"zhuzhuang_chart.html" ofType:nil]; [WebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath: path]]]; }
这里需要引入ichart-1.0.min.js 但是需要注意一点 XCode会自动编译.js文件的 这个再XCode左侧 issue navigator视图中就能看到黄叹号提示 js编译有警告
如果js被编译 会导致js代码不能正常执行的 所以这里要设置ichart-1.0.min.js为不自动编译的文件 需要在targets视图中进行配置
不同版本的XCode配置不一样 这是方法可以参考http://blog.csdn.net/lovenjoe/article/details/7383376 来进行
我的XCode版本4.3.2 配置如下
在项目配置视图中 选择targets --》 Build Phases 详细配置方式就可以参考刚才博客的介绍了 这里不作详细说明
OK 下面是demo源码 可以下载作参考 Demo项目源码下载
下面会继续深入学习通过UIWebView进行js调用来动态更新图表数据的实现 很快就会跟大家分享的~~~~