当以编程方式实现两者时,使用 UIButton 重新加载 UIWebView (Swift)
Reload UIWebView with UIButton when both are implemented programmatically (Swift)
我有一个加载嵌入 SoundCloud 轨道的 UIWebView。我从网站上复制了代码,创建了一个 html 文件,并将其包含在 Xcode 项目中。它加载得很好;但是,我希望用户能够重新加载 WebView,因为 UIWebView 非常小并且没有任何导航按钮。它只显示 SoundCloud 嵌入小部件。
有没有办法 不用 使用 Interface Builder 来实现?点击按钮时应用程序崩溃。
我已经将 UIWebView 和 UIButton 编程 实现到屏幕上,因为大小和根据 iPhone 屏幕的大小,每个坐标会有所不同。
UIWebView 在 viewDidLoad 函数之前设置为 nil 所以它可以在其他函数中访问(比如 重新加载函数)。
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 HERE" 到
的评论
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,但应用程序仍然崩溃。
您没有初始化您在 class 级别声明的 WebView
。再次在 viewDidLoad
中,您正在创建另一个具有相同名称的变量
let WebView = UIWebView(frame: CGRectMake(WebViewDetails.0, WebViewDetails.1, WebViewDetails.2, WebViewDetails.3))
所以您在 reload
方法中使用的 WebView
从未初始化,因此 error/crash.
删除 viewDidLoad
中 WebView
的关键字 let
。一切都会好的。
我有一个加载嵌入 SoundCloud 轨道的 UIWebView。我从网站上复制了代码,创建了一个 html 文件,并将其包含在 Xcode 项目中。它加载得很好;但是,我希望用户能够重新加载 WebView,因为 UIWebView 非常小并且没有任何导航按钮。它只显示 SoundCloud 嵌入小部件。
有没有办法 不用 使用 Interface Builder 来实现?点击按钮时应用程序崩溃。
我已经将 UIWebView 和 UIButton 编程 实现到屏幕上,因为大小和根据 iPhone 屏幕的大小,每个坐标会有所不同。
UIWebView 在 viewDidLoad 函数之前设置为 nil 所以它可以在其他函数中访问(比如 重新加载函数)。
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 HERE" 到
的评论 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,但应用程序仍然崩溃。
您没有初始化您在 class 级别声明的 WebView
。再次在 viewDidLoad
中,您正在创建另一个具有相同名称的变量
let WebView = UIWebView(frame: CGRectMake(WebViewDetails.0, WebViewDetails.1, WebViewDetails.2, WebViewDetails.3))
所以您在 reload
方法中使用的 WebView
从未初始化,因此 error/crash.
删除 viewDidLoad
中 WebView
的关键字 let
。一切都会好的。