Helpfeel Skeleton for iOS
iOS向けのHelpfeel Skeletonについて説明しています。
iOSにおけるWebView実装のポイント
「戻る」ボタンを適切な位置に設置しましょう。
Helpfeel Skeletonでは、検索画面から個別記事に遷移するときに、WebViewを2つ重ねて使い、スライドするアニメーションによってiOSらしいネイティブ感を増す工夫がされています。
これを利用する場合は、cookieやsessionStorageが共有されるよう気をつけましょう。
セットアップガイド
XCodeで読み込むだけで動きます。
各画面
アプリのホーム画面を想定しています。
[Menu]をタップするとTableView(Drawerを想定)が開きます。
UITableViewController にGuide, Chat supportへの導線を置きます。
[Guide]をタップするとHelpfeelViewControllerの画面が開きます。
self.present(navVC, animated: true, completion: nil) 既存のチャットサポート画面を想定しています。
メインコード概説
XCodeのMaster, Detail Appテンプレートを使用しています。
HelpfeelSkeleton2/MasterViewController.swift
Drawerを想定している画面
swiftclass MasterViewController: UITableViewController { // ... override func viewDidLoad() { super.viewDidLoad() // ... prependNewMenuItem(label: "Chat support") prependNewMenuItem(label: "Guide") // ... } // TableView内のitemがクリックされたとき override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at: indexPath as IndexPath) let label = cell?.textLabel?.text // MenuItemごとにViewControllerを指定 switch label { case "Guide": // ... popupNextVC(title: "Your app guide", vc: vc) break case "Chat support": { // ... } }} HelpfeelSkeleton2/HelpfeelViewController.swift
Helpfeelを表示するWKWebViewの画面
swiftclass HelpfeelViewController: UIViewController, UIGestureRecognizerDelegate, WKNavigationDelegate, WKUIDelegate { // Initialize webView and add to subview func initWkWebView () { // Share session between WebViews let webViewConfiguration = WKWebViewConfiguration() let processPool = HelpfeelViewController.processPool webViewConfiguration.processPool = processPool // Set webView size // ... self.webView.uiDelegate = self self.webView.navigationDelegate = self self.view.addSubview(self.webView) } // Executed before fire HTTP request func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) { let url = navigationAction.request.url!.absoluteString // ... if (self.isHelpfeelRootUrl(url: url)) { // Return to the root of the transition history (※1) self.navigationController!.popToRootViewController(animated: true) return } let vc = storyboard!.instantiateViewController(withIdentifier: "helpfeelVC3") setupNextVC(url: url, button: 101, vc: vc) // buttonPrevious // 右から左へ画面がスライドインして表示される (※2) self.navigationController!.pushViewController(vc, animated: true) }} ※1: ルート画面に遷移する
WkWebView内でクリックされたリンクのURLを見てroot ViewControllerに戻すか判定しています。
※2: WkWebViewの画面遷移を複数のViewControllerを用いて実現する
HelpfeelViewControllerを再帰的に使用しています。