0

현재 앱을 열면 특정 URL에 연결된 내 앱이 있는데, 실제로 앱을 여는 것과 웹보기를 실제로로드하는 것 사이에 지연이있을 수 있습니다. 따라서 WebView가로드 될 때마다 작업 표시기를 표시하고 싶습니다. 내 ViewController.swift에 다음 코드 :UIActivityIndicator가 나타나면 어떻게 사라지나요?

class ViewController: UIViewController, UIWebViewDelegate { 


@IBOutlet weak var webView: UIWebView! 

@IBOutlet weak var activityIndicator: UIActivityIndicatorView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    webView.delegate = self 

    let url = URL(string: "url to site") 
    webView.loadRequest(URLRequest(url: url!) 
} 

func webViewDidStartLoad(webView: UIWebView){ 
    activityIndicator.startAnimating() 
} 

func webViewDidFinishLoad(webView: UIWebView){ 
    activityIndicator.stopAnimating() 
} 

작동 표시등이 처음부터 표시되지만이 번 웹보기로드 사라지지 않고 영원히 유지됩니다.

답변

0

문제는 문법 문제입니다보십시오.

override func viewDidLoad() { 
    super.viewDidLoad() 

    webView.delegate = self 

    let url = URL(string: "your URL") 
    webView.loadRequest(URLRequest(url: url!)) 
} 

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool{ 

    activityIndicator.startAnimating() 
    return true 
} 

func webViewDidStartLoad(_ webView: UIWebView){ 

    activityIndicator.startAnimating() 
} 

func webViewDidFinishLoad(_ webView: UIWebView){ 

    activityIndicator.stopAnimating() 
} 

func webView(_ webView: UIWebView, didFailLoadWithError error: Error){ 

    activityIndicator.stopAnimating() 
} 
0

코드 구성 방법이 다소 혼란 스럽습니다. func안에@IBAction 기능이 있다고 표시됩니다. 이 경우이 작동하지 않습니다.

는 기능에 밑줄을 추가해야이 대신

class ViewController: UIViewController, UIWebviewDelegate { 
    override func viewDidLoad() { 
     ... 
     webView.delegate = self 

     // You should add this to your Storyboard, above the webview instead of here in the code 
     activityIndicator.center = self.view.center 
     activityIndicator.hidesWhenStopped = true 
     activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray 
     // I forget the actual method name - look it up 
     view.insertSubview(activityIndicator, above: webView) 
    } 

    @IBAction func openButton(_ sender: Any) { 
     let url = URL(string: "websiteURL") 
     webView.loadRequest(URLRequest(url: url!)) 
    } 

    func webViewDidStartLoad(webView: UIWebView){ 
     activityIndicator.startAnimating() 
    } 

    func webViewDidFinishLoad(webView: UIWebView){ 
     activityIndicator.stopAnimating() 
    } 

    // You'll also want to add the "didFail" method 
} 
+0

감사의 말씀에 감사드립니다. 감사의 말을 전하고 싶습니다. – athill16

+0

@ athill16'hidesWhenStopped'는 그것이 의심스럽고'didFail' 델리게이트 메소드를 구현하기 때문에'true'라고 확신 할 것입니다. 'webViewDidFinishLoad'에 중단 점을 배치하면 실제로 중단됩니까? –

+0

중단 점을 추가했지만 트리거하지는 못했지만 문제는 실제로 대부분 수정 된 구문 이었으므로 게시물에서 업데이트 할 것입니다. 내 유일한 질문은 didFail 메서드가 실제로 무엇입니까? 사람의 전화 연결 상태가 좋지 않아 webView를로드 할 수없는 경우입니까? – athill16