質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Swift

    8935questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • iOS

    4773questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Swift 2

    1340questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

  • iPhone

    1129questions

    iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

  • iPad

    165questions

    iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

webViewDidStartLoadが読み込みされず表示されない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,089

narisu

score 2

前提・実現したいこと

webviewを読み込んだ際にSVProgressを表示、読み込み完了後SVProgressを非表示にさせたいのですが、うまくいきません。
かれこれ4時間くらい格闘していて周りに聞ける方もいなくてもうお手上げ状態なので助けていただけると助かります。

該当のソースコード

swift

ここにご自身が実行したソースコードを書いてください

import UIKit
import SVProgressHUD

class ViewController: UIViewController, UIWebViewDelegate {
var webView: UIWebView?
let Url = URL(string: "https://yahoo.co.jp")

override func viewDidLoad() {
super.viewDidLoad()

// リクエストを生成する
let request = URLRequest(url: Url! as URL)
self.webview.loadRequest(request)

// 指定したページを読み込む
self.webview.loadRequest(request)
}

// WebView を生成する
func createWebView(_: UIWebView) {
// UIWebViewのインスタンスを生成
let webView = UIWebView()

// デリゲートを指定する
webView.delegate = self;

return ()
}

//読み込み時SVProgress表示
func webViewDidStartLoad(_ webView: UIWebView) {

SVProgressHUD.show(withStatus: "Loading...")
SVProgressHUD.setDefaultStyle(SVProgressHUDStyle.dark)
SVProgressHUD.setRingThickness(1.0)
NSLog("Webview has started loading")
}

//読み込み終了時SVProgress非表示
func webViewDidFinishLoad(_ webView: UIWebView) {
SVProgressHUD.dismiss()
NSLog("Webview has successfully loaded")
}

// StoryBoardで配置したwebviewのプロパティ
@IBOutlet weak var webview: UIWebView!

//戻るボタンの生成
@IBOutlet weak var back: UIButton!

//メニューボタンの生成
@IBOutlet weak var menu: UIButton!

//TOPボタンの生成    
@IBOutlet weak var top: UIButton!

// 戻るボタンの処理
@IBAction func back(_ sender: UIButton) {
self.webview.goBack()
}

// メニューボタンの処理
@IBAction func menu(_ sender: UIButton) {

}

// TOPボタンの処理
@IBAction func top(_ sender: UIButton) {
//初期URL
let Url = URL(string: "https://yahoo.co.jp/")
let request = URLRequest(url: Url! as URL)
self.webview.loadRequest(request)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()

}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fuzzball

    2017/06/09 18:13

    webViewDidFinishLoadは呼ばれるのでしょうか?

    キャンセル

  • narisu

    2017/06/09 18:14

    回答ありがとうございます。 どちらも呼ばれていないですね・・・

    キャンセル

  • fuzzball

    2017/06/09 18:38

    fromageblancさんから指摘がありますが、質問内のコードはビルドが通らないと思われますので、正しいコードに修正して下さい。また、コードは ``` で囲って下さい。

    キャンセル

回答 2

checkベストアンサー

+2

Swift2.xですか? 引数のとこ、揺れがあるんじゃないかしら。

// Swift 3.0
func webViewDidStartLoad(_ webView: UIWebView)
// Swift 2.x
func webViewDidStartLoad(webView: UIWebView)

追記。

fuzzballさんの指摘を受けて、Swift3.0というのが分かったところで…

webView.delegate = self をしている createWebView()が呼ばれてないけど大丈夫ですか?
というか、提示のコードだとビルドできない気がしますが。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/09 18:11

    URLとかNS付いてないので3ぽいですね。

    キャンセル

  • 2017/06/09 18:19

    言われてみればそうですね。追記しました!

    キャンセル

  • 2017/06/09 18:23

    回答ありがとうございます。 ビルドはできていますね…
    return の部分がよくないのでしょうか?

    キャンセル

  • 2017/06/09 19:23

    //SVProgressHUD.dismiss()
    コメントアウトを外したら表示されました・・・。
    大変失礼いたしました。

    キャンセル

+1

let webView = UIWebView()

これだと別インスタンスを作っていることになりますね。(self.webViewがnilのままということ)

self.webView = UIWebView()

とするか、

var webView = UIWebView()
//createWebView()の中ではdelegateのセットだけ行う

として下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/09 18:28 編集

    アウトレットで定義されてるwebViewも存在するので、インスタンスはストボーでもされてるかもです

    キャンセル

  • 2017/06/09 18:36

    ぅぉ!気が付きませんでしたw

    キャンセル

  • 2017/06/09 18:40

    僕のゴミコードのせいで撹乱させて申し訳ないです・・・

    キャンセル

  • 2017/06/09 18:49

    コードは``で囲むといいですよ。たぶん delgate = self が足りないのかと。

    キャンセル

  • 2017/06/09 18:55

    無知で大変も申し訳ないのですが、[コードは``で囲む]というのはどういうことでしょうか?
    また  delgate = self が足りていないというのはどこのことでしょうか?
    お手数をおかけしますが宜しくお願い致します。

    キャンセル

  • 2017/06/09 19:01

    とりあえずこれで動くか試して、動いたらおさらいしてください

    import UIKit
    import SVProgressHUD

    class ViewController: UIViewController, UIWebViewDelegate {

    let Url = URL(string: "https://yahoo.co.jp")

    override func viewDidLoad() {
    super.viewDidLoad()

    // リクエストを生成する
    let request = URLRequest(url: Url! as URL)

    webview.delegate = self

    // 指定したページを読み込む
    self.webview.loadRequest(request)
    }

    //読み込み時SVProgress表示
    func webViewDidStartLoad(_ webView: UIWebView) {

    SVProgressHUD.show(withStatus: "Loading...")
    SVProgressHUD.setDefaultStyle(SVProgressHUDStyle.dark)
    SVProgressHUD.setRingThickness(1.0)
    NSLog("Webview has started loading")
    }

    //読み込み終了時SVProgress非表示
    func webViewDidFinishLoad(_ webView: UIWebView) {
    //SVProgressHUD.dismiss()
    NSLog("Webview has successfully loaded")
    }

    // StoryBoardで配置したwebviewのプロパティ
    @IBOutlet weak var webview: UIWebView!

    //戻るボタンの生成
    @IBOutlet weak var back: UIButton!

    //メニューボタンの生成
    @IBOutlet weak var menu: UIButton!

    //TOPボタンの生成
    @IBOutlet weak var top: UIButton!

    // 戻るボタンの処理
    @IBAction func back(_ sender: UIButton) {
    self.webview.goBack()
    }

    // メニューボタンの処理
    @IBAction func menu(_ sender: UIButton) {

    }

    // TOPボタンの処理
    @IBAction func top(_ sender: UIButton) {
    //初期URL
    let Url = URL(string: "https://yahoo.co.jp/")
    let request = URLRequest(url: Url! as URL)
    self.webview.loadRequest(request)
    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

    }

    キャンセル

  • 2017/06/09 19:06

    ありがとうございます!
    SVProgress表示されました!
    ただwebviewを読み込んだ後非表示にならないです・・・。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Swift

    8935questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • iOS

    4773questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Swift 2

    1340questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

  • iPhone

    1129questions

    iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

  • iPad

    165questions

    iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。