【swift】画面遷移をJLRoutesを使ってurlルーティングで管理 by web感覚
はじめに
webのフレームワークだと、アクセスされたurlを解析して対象のコントローラを呼び出すっていうのが一般的な処理の流れです。
iosアプリでも同じような形で実装できればコードの見通しがよくなると思って調べてみたのが今回の経緯でした。
で、調べてみるとJLRoutesというのが有名どころでありました
今回はこれを使った実装例をメモしておきます
導入方法(準備)
githubをみるとcocoapodsから導入できるぽいのですが、なぜかpod installしても処理が終わらないので、、、
今回は直接ダウンロードして使いました
Info.plistの編集
「Information Property List」の「URL types」の「URL Schemes」に「myapp」として追加(myappは例です)
実装方法
AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { ・・・ // ルーティング処理 JLRoutes.addRoute("/:page") { (params: [NSObject : AnyObject]!) -> Bool in let page = params["page"] as! String // myapp://profile/*** (プロフィール画面を開きます) if page == "profile" { let viewController: ProfileViewController = ProfileViewController() viewController.params = params self.navigationController?.pushViewController(viewController, animated: true) } // myapp://setting (設定画面を開きます) else if page == "setting" { let viewController: SettingViewController = SettingViewController() self.navigationController?.pushViewController(viewController, animated: true) } return true } return true } } func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { return JLRoutes.routeURL(url) }
呼び出し側のViewController
var url = "myapp://profile?id=99999" UIApplication.sharedApplication().openURL(NSURL(string: url))
呼び出される側のViewController
class ProfileViewController: UIViewController { // urlパラメータ取得用 var params: AnyObject? override func viewDidLoad() { // self.params?["id"]でパラメータ取得 }