如何以编程方式打开url但不能在浏览器swift中打开

时间:2017-01-19 06:32:36

标签: ios swift nsurl

当用户点击srlv $t6,$t6,$t3时,我需要以编程方式打开url,但不需要segue到cell。现场需要进行统计。

这需要模仿Safari browser

我做:

post request

但是这个开放UIApplication.shared.openURL(URL(string: url)!)

2 个答案:

答案 0 :(得分:0)

如果我没有误会,你想在自己的应用程序中打开URL(无需导航到外部-Safari-浏览器)。好吧,如果是这样,你应该使用UIWebView

  

您可以使用UIWebView类在您的应用中嵌入Web内容。至   这样做,创建一个UIWebView对象,将其附加到窗口,然后发送它   请求加载Web内容。您也可以使用此类返回   并且在网页的历史上前进,你甚至可以设置一些网络   内容属性以编程方式。

<强> WebViewController:

我建议将UIWebView添加到ViewController(称为WebViewController)中,并在需要时显示ViewController;故事板上的ViewController应该如下所示:

enter image description here

不要忘记为其分配一个故事板ID。

ViewController:

class WebViewController: UIViewController   {
    @IBOutlet weak private var webVIew: UIWebView!

    var urlString: String?

    override func viewDidLoad() {
        if let unwrappedUrlString = urlString {
            let urlRequest = URLRequest(url: URL(string: unwrappedUrlString)!)

            webVIew.loadRequest(urlRequest)
        }
    }

    @IBAction private func donePressed(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }
}

<强>用法:

当用户点击另一个ViewController中的按钮时,请考虑使用它:

class ViewController: UIViewController {
    @IBAction private func donePressed(_ sender: Any) {
        let stoyrboard = UIStoryboard(name: "Main", bundle: nil)

        // withIdentifier: the used storyboard ID:
        let webViewController = stoyrboard.instantiateViewController(withIdentifier: "WebViewController") as! WebViewController
        webViewController.urlString = "https://www.google.com/"

    }
}

或特别针对您的情况(选择单元格):

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // withIdentifier: the used storyboard ID:
    let webViewController = stoyrboard.instantiateViewController(withIdentifier: "WebViewController") as! WebViewController
    webViewController.urlString = "URL GOES HERE..."
}

希望这会有所帮助。

答案 1 :(得分:0)

如果您的问题确实意味着您在外部网站上有一些您需要访问的数据,以便您可以从中提取一条信息,那么您可能不需要在以下位置显示已呈现的网页所有

您可以像这样提取页面的html内容

    var text = ""

    let url = URL(string: "https://www.bbc.co.uk")
    do
    {
        text = try String(contentsOf: url!, encoding: String.Encoding.utf8)
    }
    catch
    {
        print("error \(error.localizedDescription)")
    }
    if !text.isEmpty
    {
        parseThisPageSomehow(text)
    }

你如何解析文本取决于你需要从中得到什么,但这种方法将为你提供所需的数据。

如果您使用http而不是https,则会遇到记录良好的传输安全问题,这会导致您为http设置临时覆盖,或者开始使用https < / p>

Transport security has blocked a cleartext HTTP