Man*_*ina 5 macos file selector webview swift
我已经在Swift中创建了OSX应用程序,并使用Xcode 7将WebView嵌入其中。在WebView加载的网页上有一个文件选择器,它要求用户从用户的计算机浏览特定文件。我面临的问题是,当用户单击浏览按钮时,什么也不会发生。
如果我在Safari中打开相同的网页,则相同的文件选择器控件可以正常工作。
我是新手,所以在这种情况下的帮助将不胜感激。
这是我的viewDidLoad功能:
func viewDidLoad() {
super.viewDidLoad()
let url=NSURL(string: "http://video.online-convert.com/convert-to-mp4")
let request=NSURLRequest(URL:url!)
webView.frameLoadDelegate=self
webView.mainFrame.loadRequest(request)
webView.shouldCloseWithWindow = true
webView.drawsBackground = true
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
我自己没有为此工作,但是从令人费解的点点滴滴看来,这似乎可以满足您的要求。
首先...我正在使用WKWebView。声明并使用本地HTML文件初始化,如下所示:
import Cocoa
import WebKit
class ViewController: NSViewController {
let webview: WKWebView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
webview.autoresizingMask = [.viewWidthSizable, .viewHeightSizable]
webview.frame = view.bounds
webview.uiDelegate = self
view.addSubview(webview)
let fileURL = URL(fileURLWithPath: "/Users/myuserhere/Desktop/index.html")
webview.loadFileURL(fileURL, allowingReadAccessTo: fileURL)
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的是webview.uiDelegate。这保证我们将遵守此处记录的WKUIDelegate协议。如它所说:
WKUIDelegate类提供了用于代表网页呈现本机用户界面元素的方法。
您可以实现的方法之一是runOpenPanelWithParameters:
如果实现此方法,则保证将显示一个文件上传面板,并callback使用用户选择的结果调用此方法的方法。请记住,callback当用户按下时也要调用该方法cancel。
这是一个简单又肮脏的例子:
extension ViewController: WKUIDelegate {
func webView(_ webView: WKWebView, runOpenPanelWith parameters: WKOpenPanelParameters, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping ([URL]?) -> Void) {
let openPanel = NSOpenPanel()
openPanel.canChooseFiles = true
openPanel.begin { (result) in
if result == NSApplication.ModalResponse.OK {
if let url = openPanel.url {
completionHandler([url])
}
} else if result == NSApplication.ModalResponse.cancel {
completionHandler(nil)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这会给您一些入门的信息。
以下是一些对我有帮助的链接:
我尝试将一个简单的程序粘合在一起,以在iOS上执行相同的操作。希望对您有用@DarshanMothreja
HTML
将一个名为的文件index.html添加到Xcode项目。内容如下所示:
import Cocoa
import WebKit
class ViewController: NSViewController {
let webview: WKWebView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
webview.autoresizingMask = [.viewWidthSizable, .viewHeightSizable]
webview.frame = view.bounds
webview.uiDelegate = self
view.addSubview(webview)
let fileURL = URL(fileURLWithPath: "/Users/myuserhere/Desktop/index.html")
webview.loadFileURL(fileURL, allowingReadAccessTo: fileURL)
}
}
Run Code Online (Sandbox Code Playgroud)
迅速
这里是 ViewController
import UIKit
import WebKit
class ViewController: UIViewController {
let webview: WKWebView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
webview.autoresizingMask = [ .flexibleWidth, .flexibleHeight ]
webview.frame = view.bounds
webview.uiDelegate = self
view.addSubview(webview)
if let path = Bundle.main.path(forResource: "index", ofType: "html") {
let fileURL = URL(fileURLWithPath: path)
webview.loadFileURL(fileURL, allowingReadAccessTo: fileURL)
}
}
}
extension ViewController: WKUIDelegate { }
Run Code Online (Sandbox Code Playgroud)
如果运行上述命令,则在单击“选择文件”按钮时会得到此结果,而无需添加任何委托方法。
希望能给您一些帮助。
| 归档时间: |
|
| 查看次数: |
3145 次 |
| 最近记录: |