has no member ' 'のエラーメッセージが消えない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,012

yamataku29

score 45

ブラウザ構築をしているのですが、下記のソース上でhas no member 'showAlert'のエラーメッセージが消えません。。

import UIKit

class ViewController: UIViewController, UIWebViewDelegate,UITextFieldDelegate {
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var webView: UIWebView!
    @IBOutlet weak var backButton: UIBarButtonItem!
    @IBOutlet weak var forwardButton: UIBarButtonItem!
    @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!


    override func viewDidLoad() {
        super.viewDidLoad()

        self.webView.delegate = self
        self.textField.delegate = self

        // Do any additional setup after loading the view, typically from a nib.
        let startUrl = "http://dotinstall.com"
//        if let url = NSURL(string: startUrl){
//            let urlRequest = NSURLRequest(URL: url)
//            self.webView.loadRequest(urlRequest)
//        }

        self.jumpTourl(startUrl)
        self.setupButtonsEnabled()
        self.activityIndicatorView.hidesWhenStopped = true

    }

    func jumpTourl(urlString: String){
        if let url = NSURL(string: urlString){
        let urlRequest = NSURLRequest(URL: url)
        self.webView.loadRequest(urlRequest)
        } else {
            self.showAlert("Invalid URL")
        }



    func showAlert(message: String){
//        >= ios8
        let alertController = UIAlertController(title: "Error", message: message, preferredStyle: .Alert)
        let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
        alertController.addAction(defaultAction)
        self.presentViewController(alertController, animated: true, completion: nil)
    }


        var urlString = self.textField.text
        urlString = urlString!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
        if urlString == "" {
//            alert
            self.showAlert("Please enter URL")
        } else {
//            jumpTourl
            self.jumpTourl(urlString!)
            self.setupButtonsEnabled()
        }
        self.textField.resignFirstResponder()
        return true
    }

    func setupButtonsEnabled(){
        self.backButton.enabled = self.webView.canGoBack
        self.forwardButton.enabled = self.webView.canGoForward

    }

    func webViewDidStartLoad(webView: UIWebView) {
        self.activityIndicatorView.startAnimating()
    }

    func webViewDidFinishLoad(webView: UIWebView) {
        self.activityIndicatorView.stopAnimating()
        self.setupButtonsEnabled()
        if let urlString = self.webView.request?.URL!.absoluteString{
                self.textField.text = urlString
        }
    }





    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.

        }

    @IBAction func goBack(sender: AnyObject) {
        self.webView.goBack()
    }
    @IBAction func goForward(sender: AnyObject) {
        self.webView.goForward()
    }
    @IBAction func reload(sender: AnyObject) {
        self.webView.reload()
    }

}

お分かりの方いらっしゃいましたらご教授をお願い致します。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

以下のshowAlertメソッドがjumpTourlメソッドの中で記述されているので、jumpTourlメソッドのブロック{}の外に出してみてください。

func jumpTourl(urlString: String){
    if let url = NSURL(string: urlString){
        let urlRequest = NSURLRequest(URL: url)
        self.webView.loadRequest(urlRequest)
    } else {
        showAlert("Invalid URL")
    }

    var urlString = self.textField.text
    urlString = urlString!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
    if urlString == "" {
        //            alert
        showAlert("Please enter URL")
    } else {
        //            jumpTourl
        self.jumpTourl(urlString!)
        self.setupButtonsEnabled()
    }
    self.textField.resignFirstResponder()
    return true
}

func showAlert(message: String){
    //        >= ios8
    let alertController = UIAlertController(title: "Error", message: message, preferredStyle: .Alert)
    let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
    alertController.addAction(defaultAction)
    self.presentViewController(alertController, animated: true, completion: nil)
}

メソッドの中で他のメソッドを呼ぶには、呼び出す前にメソッドを定義していないとだめなので、先頭で定義して呼び出し時にselfを付けないと以下のように使用できます。

func jumpTourl(urlString: String){

    func showAlert(message: String){
        //        >= ios8
        let alertController = UIAlertController(title: "Error", message: message, preferredStyle: .Alert)
        let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
        alertController.addAction(defaultAction)
        self.presentViewController(alertController, animated: true, completion: nil)
    }


    if let url = NSURL(string: urlString){
        let urlRequest = NSURLRequest(URL: url)
        self.webView.loadRequest(urlRequest)
    } else {
        showAlert("Invalid URL")
    }


    var urlString = self.textField.text
    urlString = urlString!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
    if urlString == "" {
        //            alert
        showAlert("Please enter URL")
    } else {
        //            jumpTourl
        self.jumpTourl(urlString!)
        self.setupButtonsEnabled()
    }
    self.textField.resignFirstResponder()
    return true
}

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/08/27 20:02

    写経ミスでした。。
    ありがとうございます!

    キャンセル

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

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

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