【问题标题】:WebView select file from photo libraryWebView 从照片库中选择文件
【发布时间】:2016-02-13 17:47:36
【问题描述】:

我正在一个项目中使用 2 个视图,MainViewSecondViewMainView 或多或少是一个起始页,然后我使用 segue 函数从 MainView 转到 SecondView

SecondView 我有WebView,在这个网站上我有一个文件上传器。因此,用户应该能够将图片从他或她的照片库上传到网站。

使用此代码访问该网站:

if let url = NSURL(string: "https://example.com/uploader") {
        webView.loadRequest(NSURLRequest(URL: url))
    }

问题是,当我尝试上传图片时,它只会返回到我的MainView

所以当我按下 Photo Library 时,它会返回 MainView。

但是我在一个只有一个视图的新项目中重新创建了应用程序的 WebView 版本,然后一切都像魅力一样工作,如下所示

所以基本上我的问题是,当我选择照片库时,如何防止应用程序返回?

链接到 Download 项目并亲自查看。

【问题讨论】:

  • 您可以发布用于从照片库中选择照片的代码吗?
  • 这完全是从网站上完成的。使用带有文件上传功能的 Wordpress 和 Contact Form 7 插件。
  • 我认为如果你使用'self.navigationController?.pushViewController'并使用'present',如果使用pushviewcontroller。它会回到你的rootviewcontroller。因此我制作了一个当前视图。并为 webview 制作自定义标题
  • 有没有办法在代码中处理文件类型的选择?或者操作应该选择什么文件类型

标签: ios swift webview segue


【解决方案1】:

我尝试使用 Sasha Nicolas 的 hack,但它现在不适用于新的 Swift 版本。我现在正在使用 Swift 4。 Xcode 给了我一些提示,这很好用。

override func dismiss(animated flag: Bool, completion: (() -> Void)?) {
    if self.presentedViewController != nil {
        super.dismiss(animated: flag, completion: completion)
    }
}

我将它放在我的视图控制器代码的最后,就在我的主类的 } 之前。

不要忘记为info.plist 中的相机和照片添加权限,并且此代码位于视图控制器的类开头。

class ViewControllerLogado: UIViewController, UIImagePickerControllerDelegate,UINavigationControllerDelegate {}

【讨论】:

  • 上传文件后你的网页视图是否重新加载?我已经检查过真实的设备和模拟器。模拟器工作正常,但在真实设备中它重新加载。
【解决方案2】:

当我更频繁地与ViewControllers 合作时,我曾处理过一段时间。

将以下代码添加到 ViewControllerWebView 确实解决了 iOS 模拟器中的问题。

override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) 
{
    if self.presentedViewController != nil {
        super.dismissViewControllerAnimated(flag, completion: completion)
    }
}

但是,在实际设备上运行时,我仍然遇到了问题。为了解决这个问题,我还在MainViewController 中添加了该代码。

希望这能解决它并祝你编码愉快。

【讨论】:

  • 但是我将如何使用“self.dismiss(animated:true,completion:nil)”似乎我无法在这个视图控制器中使用它
【解决方案3】:

我添加了这个

NSPhotoLibraryUsageDescription 到 info.plist 文件

以及如何使用文件的描述。它适用于 Xcode 8.2.1

【讨论】:

    【解决方案4】:

    对于 Swift 3.0

    override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) 
    {
        if self.presentedViewController != nil 
        {
           super.dismiss(animated: flag, completion: completion)
        }
    }
    

    【讨论】:

      【解决方案5】:

      对此的快速解决方法是将以下代码添加到带有 WebView 的 ViewController:

      override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) {
          if self.presentedViewController != nil {
              super.dismissViewControllerAnimated(flag, completion: completion)
          }
      }
      

      这篇文章与您的问题有关: iOS 8 SDK: modal UIWebView and camera/image picker

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        • 2012-10-28
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多