• URL原理在视图控制器间跳转的运用


     一、问题引入

    一个视图控制器对应一个UI界面,那么UI界面的跳转,底层就得实现视图控制器的跳转。

    那么当界面多,且界面跳转情况复杂时,需在视图控制器中添加业务逻辑,并且增加视图控制器之间的藕合度。在java中网页跳转有xml解决此问题,但是在iOS中,系统并没有提供解决方案。

    二、认识URL

        NSString *urlString = @"http://weibo.com/p/100808a4b68909c606cae3953d196c16efa8bd?k=%E6%B5%B7%E5%8D%97%E9%A9%AC%E6%8B%89%E6%9D%BE";
        NSURL *url = [NSURL URLWithString:urlString];
        
        NSLog(@"url scheme : %@", [url scheme]); // 方案
        NSLog(@"url host : %@", [url host]); // 主机名
        NSLog(@"url port : %@", [url port]); // 端口号
        NSLog(@"url user : %@", [url user]); // 用户
        NSLog(@"url password : %@", [url password]); //密码
        NSLog(@"url path :%@", [url path]); // 路径
        NSLog(@"path componet : %@", [url pathComponents]); // path拆分成的数组
        NSLog(@"url fragment :%@", [url fragment]); // 片段
        NSLog(@"url parameterString : %@", [url parameterString]); // parameter
        NSLog(@"url query :%@", [url query]); // url中?后面部分
        NSLog(@"url relativePath :%@", [url relativePath]); // 就是path

    运行结果:

    2016-02-28 18:51:06.849 Test5[806:104259] url scheme : http

    2016-02-28 18:51:06.850 Test5[806:104259] url host : weibo.com

    2016-02-28 18:51:06.851 Test5[806:104259] url port : (null)

    2016-02-28 18:51:06.851 Test5[806:104259] url user : (null)

    2016-02-28 18:51:06.851 Test5[806:104259] url password : (null)

    2016-02-28 18:51:06.851 Test5[806:104259] url path :/p/100808a4b68909c606cae3953d196c16efa8bd

    2016-02-28 18:51:06.851 Test5[806:104259] path componet : (

        "/",

        p,

        100808a4b68909c606cae3953d196c16efa8bd

    )

    2016-02-28 18:51:06.852 Test5[806:104259] url fragment :(null)

    2016-02-28 18:51:06.852 Test5[806:104259] url parameterString : (null)

    2016-02-28 18:51:06.852 Test5[806:104259] url query :k=%E6%B5%B7%E5%8D%97%E9%A9%AC%E6%8B%89%E6%9D%BE

    2016-02-28 18:51:06.852 Test5[806:104259] url relativePath :/p/100808a4b68909c606cae3953d196c16efa8bd

    Program ended with exit code: 0

    三、如何通过URL来解决视图控制器之间的跳转?

    1、Creating viewController map。

    可以通过key和NSString来映射一个UIViewController:[manager mapKey:@"aaa" toControllerClassName:@"UIViewController"];

    可以通过key和NSString来映射一个实例:[manager mapKey:@"bbb" toControllerInstance:[[UIViewController alloc] init]];

    甚至value可以用block实现

    2、Getting viewController for key。当取出ViewController的时候, 如果有单例[ViewController sharedInstance], 默认返回单例, 如果没有, 返回[[ViewController alloc] init]。

    3、通过[manager openURLString:urlString]实现跳转。

    四、urlString规范

    1、URL的scheme部分如果为modal,则表示呈现模态视图;

    2、URL的scheme部分为window,则用host替换当前window.rootViewController;

    3、URL的query部分,用来给新的UIViewController配置新的属性值,即VC之间传值实现;

    4、URL为@"dismiss",代表关闭模态视图;

    5、如果URL直接为key/key组成的path,那么就push到key所映射的UIViewController中。

    参考第三方类库支持:https://github.com/uxyheaven/XYRouter

    具体实现,请查看源代码。 

  • 相关阅读:
    运用《深入理解Java虚拟机》书中知识解决实际问题
    FPGA实现移动目标检测
    FPGA实现人脸检测
    FPGA实现图像的边缘检测:灰度形态学梯度
    FPGA实现图像的二值形态学滤波:边界提取
    VAST3.0规范
    Flash Socket通信的安全策略问题 843端口
    100个开源游戏
    游戏指标分析
    网络广告类型有哪些?
  • 原文地址:https://www.cnblogs.com/zhouyi-ios/p/5225355.html
Copyright © 2020-2023  润新知