实现下图

  1. 开始显示八大菜系
  2. 点以后显示具体的菜
  3. 再点击之后,搜索百度
  4. 选择NO,用一个WebView显示结果
  5. 选择OK,调用系统浏览器搜索.
使用到的文件 cuisine.plist

AppDelegate.m

创建一个window,一个视图,一个导航,视图作为导航的根视图,导航作为window的根视图.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// 创建一个windowself.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];// 创建一个ViewControllerViewController *vc = [[ViewController alloc] init];// 创建一个导航 ViewController 要使用 pushViewController 跳转页面就必须要创建一个Navigation,然后使 ViewController 入栈UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:vc];// 设置根视图控制器self.window.rootViewController = navigationController;// 这个是便捷方法,去使被使用对象的主窗口显示到屏幕的最前端。你也可以使用hiddenUIView方法隐藏这个窗口(这是文档说法)[self.window makeKeyAndVisible];return YES;
}

ViewController.m

TableView就不说了.
实现跳转:
#pragma mark cell被选中调用此消息
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{// 创建第二个视图DishViewController *DishVC = [[DishViewController alloc] init];// 赋值给dishs做到传值DishVC.dishs = [self.datas valueForKey:[self.datas.allKeys objectAtIndex:indexPath.row]];// 给导航栏赋值DishVC.title = [self.datas.allKeys objectAtIndex:indexPath.row];//self 必须在navigation栈中,self.navigationController才不会为空[self.navigationController pushViewController:DishVC animated:YES]; // 跳转....// 这句代码好像可以直接跳转而不必设置Navigation
//    [self presentViewController:DishVC animated:YES completion:nil];/*使用通知同样可以传值*/
}

DishViewController.m

DishViewController.h添加代码:
@property (nonatomic, retain) NSArray *dishs; // 菜
@property (nonatomic, retain) UITableView *tableView;
@property (nonatomic, retain) id<URLDelegate> delegate; //委托
把数据加载到TableView中,这句代码可以实现在单元格右边显示箭头.
// 显示右边的小箭头[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
添加协议:
@interface DishViewController : UIViewController<UITableViewDataSource, UITableViewDelegate, UIAlertViewDelegate>

实现: - (void)tableView:didSelectRowAtIndexPath:

#pragma mark 选中cell触发此消息
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{row = indexPath.row; // 记录选中的行webViewController = [[WebViewController alloc] init]; //self.delegate = webViewController; // 设置代理webViewController.nameOfDish = [[self.dishs objectAtIndex:row] valueForKey:@"name"];// 询问是否是使用系统自带的浏览器[[[UIAlertView alloc] initWithTitle:@"选择" message:@"是否使用系统浏览器" delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"OK", nil] show];
}
实现:- (void)alertView:clickedButtonAtIndex:
#pragma mark 对alertView的响应
/*buttonIndex的值会根据按钮的顺序从0增加.0,1,2,3....*/
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{if (buttonIndex == 0) {// 设置标题webViewController.title = webViewController.nameOfDish;// 跳转页面[self.navigationController pushViewController:webViewController animated:YES];}else{// 代理if ([self.delegate respondsToSelector:@selector(openBowser)]) {[self.delegate openBowser];}}
}

添加协议:

URLDelegate.h:
@protocol URLDelegate <NSObject>
#pragma mark 加工访问web的url
- (NSString *) urlstring:(NSString*) nameOfDish;
#pragma mark 调用系统自带的浏览器
- (void) openBowser;
@end
WebViewController
WebViewController.实现协议.
WebViewController.h:
@interface WebViewController : UIViewController<URLDelegate>
@property (nonatomic, retain) NSString *nameOfDish; // 菜名
@property (nonatomic, retain) UIWebView *webView;
@end

WebViewController.m:

@implementation WebViewController- (void)viewDidLoad {[super viewDidLoad];[self buildWebView];[self loadWebPageWithString:[self urlstring:self.nameOfDish]];
}#pragma mark 创建一个WebView
- (void)buildWebView{// 初始化WebViewself.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];// 自动对页面进行缩放以适应屏幕[self.webView setScalesPageToFit:YES];[self.view addSubview:self.webView];
}#pragma maek 加载一个页面
- (void)loadWebPageWithString:(NSString *) urlstring{// 把string转成urlNSURL *url = [NSURL URLWithString:urlstring];// 加载页面需要NSURLRequestNSURLRequest *request = [NSURLRequest requestWithURL:url];[self.webView loadRequest:request];
}#pragma mark 加工访问web的url
- (NSString *) urlstring:(NSString*) nameOfDish{//ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是:nameOfDish = [nameOfDish stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];// 百度没有提供搜索接口,不过可以使用链接异步得到结果return [NSString stringWithFormat:@"http://www.baidu.com/s?wd=%@&cl=3",nameOfDish];
}#pragma mark 调用系统自带的浏览器
- (void)openBowser{NSURL *url = [NSURL URLWithString:[self urlstring:self.nameOfDish]];// 调用系统..[[UIApplication sharedApplication] openURL:url];
}
@end

IOS_代码实现树形导航相关推荐

  1. HTML语言编写的树形导航栏代码

    求HTML语言编写的树形导航栏代码 代码: <HTML> <HEAD> <TITLE>树形菜单</TITLE> <STYLE type=" ...

  2. SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题...

    转:http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发--关于TreeView树形控 ...

  3. 在ASP.NET MVC下实现树形导航菜单

    在需要处理很多分类以及导航的时候,树形导航菜单就比较适合.例如在汽车之家上: 页面主要分两部分,左边是导航菜单,右边显示对应的内容.现在,我们就在ASP.NET MVC 4 下临摹一个,如下: 实现的 ...

  4. 自己写一个树形导航菜单

    自己写一个树形导航菜单 转载于:https://www.cnblogs.com/jellyfish/p/3995186.html

  5. octotree插件 --- 将 Github 项目代码以树形格式展示

    简介 octotree 是一款chrome插件,它可以将 GitHub 项目代码以树形格式进行展示,非常适合我们探索项目源,并且我们可以下载指定的文件,而无需将整个项目都下载下来. octotree下 ...

  6. 第四篇 bonus:js代码实现网页导航二级菜单

    第四篇 bonus:js代码实现网页导航二级菜单 由于小猪蹄子说想学习一些和爬虫相关的东西,所以我让她去看看requests这个库,非常的人性化,可以非常方便的实现常用的爬虫功能.但是小猪蹄子看了以后 ...

  7. HTML+CSS 主页面美化的详细过程及全部代码(美化导航栏+文本框+按钮)

    文章目录 效果图展示 前言 步骤 0.创建css文件 1.美化中间板块 1.1 html改变 1.2. css部分 1.3. placeholder美化 2.增加导航栏 2.1 html文件增加代码 ...

  8. 如何用最简洁的css代码写一个导航栏

    如何用最简洁的css代码写一个导航栏 首先我们在里面通过标签添加一个logo,然后通过标签简单的设置几个导航栏中的内容. 注:标签主要是用于设置超链接. <div><img src= ...

  9. 树形导航栏,由树形数据生成导航栏。

    最近做一个小项目,中间有一个需求是,把后台返回的树形数据生成为导航栏格式,怪我愚笨,搜了好多也没看懂.于是自己写了一个,以备以后用到. 首先,后台返回的树形数据为较为简单的二层结构.名为 data d ...

最新文章

  1. 《Akka应用模式:分布式应用程序设计实践指南》读书笔记1
  2. 【C/C++13】天气APP:数据挖掘/HTTP协议/非结构化数据存储(filetoblob.cpp),数据管理/监控告警(hsmtable.cpp,tbspaceinfo.cpp)
  3. Sublime Text 关闭自动更新
  4. python动态绘图并保留之前绘图_[转]基于Python实现matplotlib中动态更新图片(交互式绘图)...
  5. Windows10安装ubuntu 20双系统
  6. iPhone 12 Pro可能加入激光雷达传感器 摄像头布局将调整
  7. Chirpy Zippy工具使用心得
  8. centos lamp
  9. 高清成主流 十大最受用户关注摄像头
  10. 传说中的世界500强面试题-推理能力(2)
  11. 使用pr给视频局部打马赛克
  12. V-REP 插件教程
  13. 第三方支付机构是如何产生的?有着怎样的历史背景?它的未来又该如何去走得更加辉煌?
  14. 1.17 设置工作簿的页眉和页脚 [原创Excel教程]
  15. 英语口语练习一之work详解
  16. 基于R语言的seasonal包使用手册_04.as.data.frame.seas
  17. 组图:腰缠万贯 看看中国历史上二十大富豪
  18. Typecho主题下载,关于Besking主题下载
  19. 项目管理 之六 详解 Gitlab 本地部署全过程、Gitlab Pages、企业版 PATCH
  20. 解决问题:Do not know how to handle these types to promote: {‘DoubleTensor‘, ‘FloatTensor‘}

热门文章

  1. Unity小Demo
  2. 星型模型和雪花型模型的区别
  3. 个人资讯——如何分析业务需求和用户痛点
  4. 如何有效安排工作的内容
  5. 【SQL开发实战技巧】系列(四十五):Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节
  6. Stochastic Screen Space Reflections(二):SSR
  7. 加载Flutter Assets中2倍图的一些细节
  8. mybatis报错:XML fragments parsed from previous mappers does not contain value for com.mapper...(已解决)
  9. 莎士比亚《罗密欧与朱丽叶》读书笔记及读后感作文4500字
  10. Golang Iris Websocket 跨域问题