我想按一个按钮打开维基百科网站,所以我创建了这个动作:
@IBAction func wikiTapped(_ sender: Any) {
let urlW = URL[string: "https://en.wikipedia.org/wiki/\(place.name)"]
if urlW != nil {
let svc = SFSafariViewController.init(url: urlW)
self.navigationController?.pushViewController(svc, animated: true)
}
}
但它不起作用。我做错了什么?我该怎么调整呢?
答案 0 :(得分:1)
下次提问时,请包括重现的步骤和问题的简要说明;这样一来,强烈建议您快速回答一下,
##如何使用它? ##
根据您的需要,在用户点按按钮时初始化SFSafariViewController
:
SFSafariViewController
API非常简单。要创建SFSafariViewController
,只需传递一个网址:
let bookmark = NSURL(string: "http://www.apple.com")!
let safari = SFSafariViewController(URL: bookmark)
presentViewController(safari, animated: true, completion: nil)
请注意,需要显示SFSafariViewController,而不是从navigationController推送
推送SFSafariViewController可能会导致黑屏或令人讨厌的崩溃,甚至不建议以这种方式使用它。
-
要在打开Reader的情况下打开SFSafariViewController
,请使用完整的指定初始化程序:
let safari = SFSafariViewController(URL: bookmark, entersReaderIfAvailable: true)
-
当显示SFSafariViewController
时,它会显示为全屏,右上角有一个“完成”按钮。但是,除非SFSafariViewController
实例具有委托,否则点击此按钮不会执行任何操作。 SFSafariViewControllerDelegate
协议提供三种可选方法。要回复“完成”按钮,代理人必须实施safariViewControllerDidFinish
:
func safariViewControllerDidFinish(controller: SFSafariViewController) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
虽然此方法在技术上是可选的,但是当用户点击完成时不会关闭视图控制器的应用程序可能会让用户感到不安。接下来是safariViewController:didCompleteInitialLoad:
。此方法允许委托知道加载已完成并指示加载是否成功。
func safariViewController(controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) {
if didLoadSuccessfully == false {
print("Page did not load!")
controller.dismissViewControllerAnimated(true, completion: nil)
}
}
答案 1 :(得分:0)
正如其他人所说,当你提出问题时,请尝试更具体。代码中的[2018-01-30 10:51:10] testing.ERROR: Method [middleware] does not exist on
view. {"exception":"[object] (BadMethodCallException(code: 0): Method
[middleware] does not exist on view. at C:\\laragon\\www\
li-ccm\\vendor\\laravel\\framework\\src\\Illuminate\\View\\View.php:399)
[stacktrace]
#0 C:\\laragon\\www\
li-ccm\
outes>\\web.php(17): Illuminate\\View\\View->__call('middleware', Array)
行会在Xcode中为您提供一个很好的大红色错误。
这也是一个使用let urlW ...
的好地方,所以你摆脱了你的if,你的代码看起来更干净了:
guard let