0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Swift MkMapViewで地図アプリ作成してみた(22)- ブラウザを表示する

Last updated at Posted at 2020-05-04

#記事一覧
Swift MkMapViewで地図アプリ作成してみた(記事一覧)

#ブラウザを表示する

###WKWebViewで簡単にブラウザを表示する

ブラウザの表示領域の設定と、ブラウザの状態取得、操作を有効にする。

ブラウザを定義する
import WebKit

class PointPopupViewController: UIViewController,WKNavigationDelegate, WKUIDelegate {

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // ブラウザの表示領域を設定
        let rect = CGRect(x:0, y:230, width:width, height:height-230)
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: rect, configuration: webConfiguration)

        // 読み込み開始、完了などの状態を取得できる様にする
        webView.navigationDelegate = self

        // back, forwardなどの操作メソッドを使用できる様にする
        webView.uiDelegate = self

  • WKNavigationDelegate(webView.navigationDelegate = self)で、読み込み開始、完了などの状態を取得できる様にする
  • WKUIDelegate(webView.uiDelegate = self)で、back, forwardなどの操作メソッドを使用できる様にする

###Googleを表示してみる

ブラウザにURLを指定して表示する。

ブラウザでGoogleを表示する
        var url: String = "https://www.google.co.jp"

        // 日本語を含んだ文字列をURLやNSURLにするとnilになる対策
        let encodeUrl: String = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
        let webUrl = URL(string: encodeUrl)
        let myRequest = URLRequest(url: webUrl!)
        webView.load(myRequest)

        // インスタンスをビューに追加する
        self.view.addSubview(webView)

###セミモーダルビューにブラウザを表示する
(21)- 周辺検索した地点をセミモーダルビューに表示するでセミモーダルに表示した地点をGoogle検索するためのクエリを追加する。

Googleの検索条件を指定してブラウザ表示する
        var url: String = "https://www.google.co.jp"
        url += "/search?q="
        url += appDelegate.walkViewController.getTapStreetAddr()
        url += "+"
        url += appDelegate.walkViewController.getTapPointTitle()

そうすると、セミモーダルビューは以下の様に表示される。
image.png

###読み込み開始、完了の状態を取得する
読み込み開始、完了などの状態を取得して、
back(<), forward(>)のボタンの状態を更新する。

読み込み開始、完了の状態を取得
    // 読み込み開始
    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
        setEnableWebButton()
    }
    
    // Web読み込み完了
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        setEnableWebButton()
    }

    // Web back/forwardボタンのisEnableを更新する
    func setEnableWebButton() {
        // カスタムの文字色で初期化
        let g = CGFloat(0x94) / 255
        let b = CGFloat(0xFE) / 255
        let strColor: UIColor = UIColor(red: 0, green: g, blue: b, alpha: 1.0)
        
        if webView.canGoBack {
            backBtn.isEnabled = true
            backBtn.setTitleColor(strColor, for: .normal)
        }
        else {
            backBtn.isEnabled = false
            backBtn.setTitleColor(UIColor.gray, for: .normal)
        }
        
        if webView.canGoForward {
            forwardBtn.isEnabled = true
            forwardBtn.setTitleColor(strColor, for: .normal)
        }
        else {
            forwardBtn.isEnabled = false
            forwardBtn.setTitleColor(UIColor.gray, for: .normal)
        }
    }
  • webView.canGoBackで戻ることが可能かを取得
  • webView.canGoForward進むことが可能かを取得

back(<), forward(>)ボタンを実装する

back forward ボタンを実装する
    // < ボタンを押下した時の処理
    @IBAction func btnBack(_ sender: Any)
    {
        if webView.canGoBack {
            webView.goBack()
        }
    }

    // > ボタンを押下した時の処理
    @IBAction func btnForward(_ sender: Any)
    {
        if webView.canGoForward {
            webView.goForward()
        }
    }
0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?