URLManager官方解说

URL Scheme为基础的NavigationController,让ViewController实现松耦合,不依赖

使用

URLManager提供两个NavigationController,一个WebViewController和一个基础ViewController,可单独使用也可结合使用。

UMViewController

URLManager的基础ViewController,使用URLManager需要以UMViewController代替UIViewController作为基类。

UMViewController可以使用URL初始化(方法如下)。但一般不直接使用,而是通过NavigationController的工厂方法。

- (id)initWithURL:(NSURL *)aUrl;
- (id)initWithURL:(NSURL *)aUrl query:(NSDictionary *)query;

通过URL打开新的ViewController过程中会触发以下方法

- (BOOL)shouldOpenViewControllerWithURL:(NSURL *)aUrl; // 是否继续打开
- (void)openedFromViewControllerWithURL:(NSURL *)aUrl; // 从哪里来

UMNavigator

UMNavigator是一个单例对象,可以监控当前显示的ViewController,并使用URL管理机制代替UINavigationController的push和pop机制。

注册URL和ViewController的对应关系

    [[UMNavigator sharedNavigator] setViewControllersForKeysFromDictionary:@{@"nava":navA,
                                                                             @"navb":navB}];

    [[UMNavigator sharedNavigator] setViewControllerName:@"UMDemoViewController"
                                                  forURL:@"demo"];

    UINavigationController *navC = [[UINavigationController alloc] initWithRootViewControllerURL:
                                    [[NSURL URLWithString:@"um://demo"]
                                     addParams:[NSDictionary dictionaryWithObjectsAndKeys:
                                                @"Demo1", @"title", nil]]];

    [[UMNavigator sharedNavigator] setViewController:navC forURL:@"navc"];

初始化UMNavigationController

UMNavigationController * umNav = [[UMNavigationController alloc]
            initWithRootViewControllerURL:[[NSURL URLWithString:@"um://demo"]
                                    addParams:[NSDictionary dictionaryWithObjectsAndKeys:
                                                @"Demo", @"title", nil]]];
[self.window addSubView:umNav.view];

打开新的ViewController

// 取代 [self.navigationController pushViewController: animated:];
[[UMNavigator sharedNavigator] openURL:[NSURL URLWithString:@"um://demo?title=NextDemo&param=value"]];

调用openURL: 将会触发以下方法

在调用方Controller中会触发以下方法,返回YES则执行push效果

- (BOOL)shouldOpenViewControllerWithURL:(NSURL *)aUrl;

在被调用的ViewController中,触发以下方法

- (void)openedFromViewControllerWithURL:(NSURL *)aUrl;

UMSlideNavigationController

侧栏导航,与Path侧栏滑动类似的效果。

    UINavigationController * navA = [[UINavigationController alloc]
                                    initWithRootViewController:[[UIViewController alloc] init]];
    UMNavigationController * navB = [[UMNavigationController alloc]
                                    initWithRootViewControllerURL:[NSURL urlWithString:@"um://demo"]];

    self.navigator = [[UMDemoSlideNavViewController alloc] initWithItems:@[@[navA, navB], @[navA]]];

侧栏滑动即将出现和已经消失时,将会发送两个通知。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] postNotificationName:UMNotificationWillShow object:nil];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    [[NSNotificationCenter defaultCenter] postNotificationName:UMNotificationHidden object:nil];
}

UMWebViewController

当使用URL管理ViewController过程中,如果出现http协议的URL则自动调用UMWebViewController,载入WebView

项目链接:https://github.com/gaosboy/URLManager

URLManager官方解说,布布扣,bubuko.com

时间: 2024-08-15 19:04:49

URLManager官方解说的相关文章

MySQL 的 utf8_general_ci 和 utf8_unicode_ci 有什么区别,应如何选择?

一般的解说是 utf8_general_ci 速度较快,utf8_unicode_ci 准确性较好 … 但快在那里,又好在什么地方呢? 首先就其准确性说,这世界上有无数种文字,除了通用的英文使用我们较熟悉的 A-Z 字符外,还有很多种近似的写法用于法文.德文.俄文等等… 光是一个 A 字就有数十种不同表现为什么不都用同一种 A 呢,几十种多麻烦啊.事实上,它们在所属的文字上都各有意义,可能代表不同的发音,也可能是其他东西.在某些语言上,同一个单词不同发音可能就代表两个意思. 校对规则 utf8_

Android数据加密之SHA安全散列算法

前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好奇心,所以趁着晚上没啥事,来学习一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 Android数据加密之Des加密 Android数据加密之MD5加密 Android数据加密之Base64编码算法 SHA加密算法 SHA(Secure Hash A

Android开源库项目集锦

一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的全部平台.并且他会自己主动的推断是调用原生Action Bar还是使用扩展ActionBar. 在我的小熊词典里实用到这个库,并且非常多非常知名的App也在使用这个库.GitHub Official ActionBar科普 Android-ViewPagerIndicator : 这是与ViewPager兼容

JS魔法堂:浏览器模式和文档模式怎么玩?

一.前言 从IE8开始引入了文档兼容模式的概念,作为开发人员的我们可以在开发人员工具中通过“浏览器模式”和“文档模式”(IE11开始改为“浏览器模式”改成更贴切的“用户代理字符串”)品味一番,它的出现极大地方便了苦逼的前端攻城狮们适配各版本的IE,但jser们也不能完全信任它,因为它只是提供尽可能的文档模式模拟而已. 本篇大部分内容来源于官方解说:http://msdn.microsoft.com/library/cc288325(v=vs.85).aspx,并尽量融入个人平常工作中踩过的坑加以

POJ 3155 Hard Life(最大密度子图+改进算法)

Hard Life Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 9012   Accepted: 2614 Case Time Limit: 2000MS   Special Judge Description John is a Chief Executive Officer at a privately owned medium size company. The owner of the company has

浏览器模式和文档模式怎么玩?

一.前言 从IE8开始引入了文档兼容模式的概念,作为开发人员的我们可以在开发人员工具中通过“浏览器模式”和“文档模式”(IE11开始改为“浏览器模式”改成更贴切的“用户代理字符串”)品味一番,它的出现极大地方便了苦逼的前端攻城狮们适配各版本的IE,但jser们也不能完全信任它,因为它只是提供尽可能的文档模式模拟而已. 本篇大部分内容来源于官方解说:http://msdn.microsoft.com/library/cc288325(v=vs.85).aspx,并尽量融入个人平常工作中踩过的坑加以

IE和火狐的css兼容性问题

CSS对浏览器器的兼容性具有很高的价值,通常情况下IE和Firefox存在很大的解析差异,这里介绍一下兼容要点. 1.DOCTYPE 影响 CSS 处理 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中 4.FF: 设置 padding 后, div 会增加 h

EChart 标题 title 样式,x轴、y轴坐标显示,调整图表位置等

示例里工作一般情况是够用了,更复杂的可以查询教程: title 官方解说:http://echarts.baidu.com/option.html#title 坐标相关: X轴:http://echarts.baidu.com/option.html#xAxis 坐标相关: Y轴:http://echarts.baidu.com/option.html#yAxis 表格部分:http://echarts.baidu.com/option.html#grid <script> function

android开源项目之OTTO事件总线(二)官方demo解说

官方demo见  https://github.com/square/otto 注意自己该编译版本为2.3以上,默认的1.6不支持match_parent属性,导致布局文件出错. 另外需要手动添加android-support-v4和otto到自己的libs文件夹. 主要代码逻辑: 1,在主页面点clear按钮,发布两个事件并传递对象. 2,然后LocationHistoryFragment接收事件对象,并处理. 1,BusProvider提供一个全局唯一的Bus实例对象 调用的时候使用MyPr