2016-06-24 35 views
0

我有一個加載嵌入SoundCloud軌道的UIWebView。我從網站複製了代碼,創建了一個html文件,並將其包含在Xcode項目中。它裝載完美罰款;但是,我希望用戶能夠重新加載WebView,因爲UIWebView非常小,並且沒有任何導航按鈕。它只是顯示SoundCloud嵌入部件。以編程方式實現UIButton的UIWebView重載(Swift)

有沒有辦法實現這個沒有使用接口生成器?點擊按鈕時,應用程序崩潰。

我已經實現了的UIWebView的UIButton到屏幕編程因爲大小和每個座標將取決於iPhone的屏幕大小是不同的。

的UIWebView中在viewDidLoad中功能之前設置爲,因此它可以被訪問在其它功能(如重載功能)。

class SecondViewController: UIViewController, UIWebViewDelegate { 

    let WebView: UIWebView! = nil 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     let WebViewDetails = getCoordAndSize("WEBV") // stores 4 values into one variable. its a tuple 
     let WebView = UIWebView(frame: CGRectMake(WebViewDetails.0, WebViewDetails.1, WebViewDetails.2, WebViewDetails.3)) 

     //load local html file 
     let localfilePath = NSBundle.mainBundle().URLForResource("sctrack", withExtension: "html") 
     let myRequest = NSURLRequest(URL: localfilePath!) 
     WebView.loadRequest(myRequest) 
     WebView.delegate = self 

     let refreshButton = UIButton() 
     refreshButton.setTitle("Refresh", forState: .Normal) 
     refreshButton.setTitleColor(UIColor.whiteColor(), forState: .Normal) 
     refreshButton.backgroundColor = UIColor.clearColor() 
     refreshButton.layer.cornerRadius = 5 
     refreshButton.layer.borderWidth = 1 
     refreshButton.layer.borderColor = UIColor.whiteColor().CGColor 
     refreshButton.frame = CGRectMake((self.view.frame.size.width - 240)/2, (imageViewDetails.2 - 40),240,40) 


     //(LOOK HERE) BUTTON ACTION . What I want it to do is to reload html file when user taps on it 
     refreshButton.addTarget(self, action: #selector(reload), forControlEvents: .TouchUpInside) 
     self.view.addSubview(refreshButton) 
    } 

下面是爲refreshButton功能。當用戶點擊按鈕時,它調用重載功能。我想要它重新加載本地文件。我添加的註釋說:「ERROR這裏」

func reload(sender: UIButton!) { 
     //ERROR HERE 
     WebView.reload() 

     let alertView = UIAlertController(title: "Message", message: "Track refreshed! Enjoy ✨", preferredStyle: .Alert) 
     // Initialize Actions 
     let okAction = UIAlertAction(title: "Ok", style: .Default) { (action) -> Void in 
     } 
     alertView.addAction(okAction) 
     self.presentViewController(alertView, animated: true, completion: nil) 
    } 
} 

我一直在努力,包括重載函數內的HTML請求,並使用WebView.loadRequest(myRequest)的代替WebView.reload,但應用仍然崩潰。

回答

1

您尚未初始化WebView,這是您在班級級別聲明的。又在viewDidLoad您正在使用相同的名稱

 let WebView = UIWebView(frame: CGRectMake(WebViewDetails.0, WebViewDetails.1, WebViewDetails.2, WebViewDetails.3)) 

所以你WebView用於reload方法從未初始化,因此錯誤/崩潰創建另一個變量。

刪除let關鍵字viewDidLoad對於WebView。一切都會正常工作。

+0

非常感謝@Santosh !.我從課堂級別和viewDidLoad中刪除,它的作品!令人驚歎的是,兩個單詞如何使應用程序崩潰。 – codeherk

+1

太棒了!請接受這個答案;) – Santosh