IOS开发中的页面跳转

IOS开发中的页面跳转

不止在移动开发领域,甚至对于所有的前端开发,页面跳转都是最基本的场景转换,是开发过程 中最基本的问题。对于IOS初学者,push与present是两种最常用的方式,在开发的逐渐深入过程 中,需要接触到APN的推送、网络链接等等急于URLScheme的高级跳转方式,随着开发经验的不断 丰富,将APP中的跳转统一使用URLScheme来管理不失为一种良好的设计。

Push与Present

Push与Present是最基本的两种转场方式,也是URLScheme等高级封装的基础。两者最直观的区别 就是push的转场效果是自右向左的,其需要UINavigationController的配合使用,present模态 窗口的默认转场效果是自下而上的,两种的使用方式也有着本质区别。

UIViewController *nextViewController = [[UIViewController alloc] init];
nextViewController.title = @"第二个界面";
[self.navigationController pushViewController:nextViewController animated:YES];

UIViewController *nextViewController = [[UIViewController alloc] init];
nextViewController.title = @"第二个界面";
[self presentViewController:nextViewContrller animated:YES completed:nil];

Present方式经常被是用来进行字段的填充或者编辑页面,Present方式是默认没有NavigationBar 的,如果需要可以在外面包裹一层UINavigationViewController,如下:

[self presentViewController:[[UINavigationController alloc]
    initWithRootViewController:controller] animated:YES completion:^{
}];

URLScheme

我们在开发过程中,会遇到四种与跳转相关的场景,分别是:

  • 外部网页场景

    只能通过AppDelegate中事件去获取对应的URL进行匹配。

  • Push推送场景

    通过AppDelegate中的事件去获取数据,取出链接字段,然后自定义一个URL,就可以实现 跳转了。

  • 内部网页场景

    UIWebView在内部打开URL,如果要在网页中跳转APP页面,有两种方法:一种是使用JSBridge, js调用native的handler,跳到相关页面;二是直接使用url来跳转,原理同情景一。

  • 应用内点击跳转

    最普通的打开方式,也同样可以抽离一个URLScheme匹配器去匹配打开。

上面总结了四种场景,如果对于新手来说,可能会每一种场景写一遍跳转代码,这样即低效又 难以维护,高手会选择将这四种场景尽量融合为一种URLScheme,然后使用URL匹配器统一打开。

由于URLScheme的多功能性,需要给URLScheme定义一个类:

@interface MYURLObject : NSObject
    @property MYURLType type;
    NSDictionary *params;
@end

当然还需要一个Route类,该类最好能同时处理MYURLObject和urlString,其API如下:

+ (void)navigateWithURLObject:(LNURLObject *)obj;
+ (void)navigateToURL:(NSString *)url fromViewController:(UIViewController *)controller;

由于前面所说的前三个场景均是需要使用urlString来跳转,所以需要一个将urlString转化为 MYURLObject的类,其API为:

+ (MYURLObject *)convertToURLObject:(NSString *)url;

这样一个URL匹配器就搭建完成了,在写跳转代码的时候,请优先考虑URLScheme。



Previous     Next
zhing /
Published under (CC) BY-NC-SA in categories ios  tagged with ios