Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 使用多个按钮浏览同一页面中的文件的WebView_Xcode_Swift_Macos_Uiwebview - Fatal编程技术网

Xcode 使用多个按钮浏览同一页面中的文件的WebView

Xcode 使用多个按钮浏览同一页面中的文件的WebView,xcode,swift,macos,uiwebview,Xcode,Swift,Macos,Uiwebview,我正在使用Swift和WebView开发OSX应用程序。 WebView包含两个用于浏览文件的HTML按钮:第一个按钮仅允许图像,而第二个按钮允许选择多个文件 问题是,我无法知道调用webview委托方法runOpenPanelForFileButtonWithResultListener时触发了哪个按钮 我想要这样的东西: func webView(sender: WebView!, runOpenPanelForFileButtonWithResultListener resultListe

我正在使用Swift和WebView开发OSX应用程序。 WebView包含两个用于浏览文件的HTML按钮:第一个按钮仅允许图像,而第二个按钮允许选择多个文件

问题是,我无法知道调用webview委托方法runOpenPanelForFileButtonWithResultListener时触发了哪个按钮

我想要这样的东西:

func webView(sender: WebView!, runOpenPanelForFileButtonWithResultListener resultListener: WebOpenPanelResultListener!, allowMultipleFiles: Bool) {

    let openDialog = NSOpenPanel()

    if button1 {
        openDialog.allowedFileTypes = [kUTTypeImage as String]
    }

    if button2 {
        openDialog.allowsMultipleSelection = true
    }

    // Other stuffs
}

我最终找到了一种通过从Javascript调用Swift函数来实现这一点的方法。 解释此通信是如何工作的

当用户单击browse按钮时,我捕获事件并将按钮的名称从Javascript发送到WebView:

$(document).on('click', '#MyButtonName', function () {
    if (navigator.userAgent === "MyWebView") {
        webView.setClickedButton("MyButtonName");
    }
});
然后在Swift中:

// Get Javascript key
func webView(webView: WebView!, didClearWindowObject windowObject: WebScriptObject!, forFrame frame: WebFrame!) {
    windowObject.setValue(self, forKey: "webView")
}

// Call Swift selector
override class func webScriptNameForSelector(aSelector: Selector) -> String! {
    if aSelector == "setClickedButton:" {
        return "setClickedButton"
    }
    else {
        return nil
    }
}

// Allow selector
override class func isSelectorExcludedFromWebScript(aSelector: Selector) -> Bool {
    return false
}

// Set the current clicked button from Javascript
func setClickedButton(btnName:String) {
    self.htmlClickedButton = btnName
}
现在,我可以在我的委托方法中单击按钮:

if (self.htmlClickedButton == "MyButtonName") {
    openDialog.allowedFileTypes = [kUTTypeImage as String]
}
我不确定这个解决方案是否可行,但它看起来并不是解决我的问题的最佳方法。 因此,我打开这个帖子,寻求更好的建议