Подтвердить что ты не робот

Swift 3 WebView

Итак, я просто обновился до новых Xcode8 и Swift3, но теперь мой веб-просмотр не работает. Вот код, который я использовал:

UIWebView.loadRequest(webView)(NSURLRequest(URL: NSURL(string: "http://hardwirestudios.com")!))

Теперь мне дают две ошибки:

"NSURL" неявно конвертируется в "URL"; вы хотели использовать "как" для явного преобразования? "NSURLRequest" неявно конвертируется в "URLRequest"; вы хотели использовать 'as' для явного преобразования?

4b9b3361

Ответ 1

Для этой точной ситуации повторите свою строку:

yourWebView.loadRequest(URLRequest(url: URL(string: "http://hardwirestudios.com")!))

... и переименуйте переменную yourWebView в единицу, которую вы фактически используете.

В Swift 3.0 используйте URL и URLRequest, поскольку почти все NS были удалены.

Ответ 2

Для iOS 12.x +

"UIWebView" устарел в iOS 12.0: больше не поддерживается; пожалуйста, примите WKWebView.

Пример WKWebView

Для iOS <= 11.x

Использование StoryBoard

ViewController.swift

import UIKit

class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var webView: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        webView.delegate = self
        if let url = URL(string: "http://apple.com") {
            let request = URLRequest(url: url)
            webView.loadRequest(request)
        }
    }
}

Main.storyboard

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<dependencies>
    <deployment identifier="iOS"/>
    <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
    <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
    <!--View Controller-->
    <scene sceneID="tne-QT-ifu">
        <objects>
            <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="stackoverflow_39682344" customModuleProvider="target" sceneMemberID="viewController">
                <layoutGuides>
                    <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                    <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                </layoutGuides>
                <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                    <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                    <subviews>
                        <webView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xr8-sF-fyd">
                            <color key="backgroundColor" red="0.36078431370000003" green="0.38823529410000002" blue="0.4039215686" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </webView>
                    </subviews>
                    <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstItem="xr8-sF-fyd" firstAttribute="bottom" secondItem="wfy-db-euE" secondAttribute="top" id="A3n-Xx-65O"/>
                        <constraint firstAttribute="trailing" secondItem="xr8-sF-fyd" secondAttribute="trailing" id="OZa-E2-XIe"/>
                        <constraint firstItem="xr8-sF-fyd" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" id="Tn3-gw-V4p"/>
                        <constraint firstItem="xr8-sF-fyd" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="tYl-t1-QdU"/>
                    </constraints>
                </view>
                <connections>
                    <outlet property="webView" destination="xr8-sF-fyd" id="s1G-80-juD"/>
                </connections>
            </viewController>
            <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
        </objects>
        <point key="canvasLocation" x="136.80000000000001" y="137.18140929535232"/>
    </scene>
</scenes>
</document>

Результат

enter image description here

Программный

import UIKit

class ViewController: UIViewController, UIWebViewDelegate {

    var webView: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        webView = UIWebView(frame: UIScreen.main.bounds)
        webView.delegate = self
        view.addSubview(webView)
        if let url = URL(string: "http://apple.com") {
            let request = URLRequest(url: url)
            webView.loadRequest(request)
        }
    }
}

Info.plist

добавить в настройках безопасности транспорта Info.plist

 <key>NSAppTransportSecurity</key>
 <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
 </dict>

Другой

Пример WKWebView

Ответ 3

класс WebView: UIViewController {

@IBOutlet var myWebView: UIWebView!

var urlValue = ""

override func viewDidLoad() {
    super.viewDidLoad()
    if let url = URL (string: urlValue){
        let requestObj = URLRequest(url: url)
        _ = myWebView.loadRequest(requestObj)
    }
}

}

Ответ 4

Динамический веб-класс с загрузкой:

class WebViewController : UIViewController, UIWebViewDelegate {

var url : String!
var webView : UIWebView!
var loadingView : UIActivityIndicatorView!

override func viewDidLoad() {


    let x = Int(UIScreen.main.bounds.width / 2 - 25)
    loadingView = UIActivityIndicatorView(frame : CGRect(x: x, y: 100, width: 50, height: 50))
    loadingView.activityIndicatorViewStyle = .gray

    webView = UIWebView(frame: UIScreen.main.bounds)
    webView.delegate = self
    view.addSubview(webView)
    if let url = URL(string: url) {
        let request = URLRequest(url: url)
        webView.loadRequest(request)
    }else{

        self.navigationController?.popViewController(animated: true)
    }

    view.addSubview(loadingView)
    loadingView.startAnimating()
}

func webViewDidFinishLoad(_ webView: UIWebView) {

    loadingView.removeFromSuperview()
}

static func initController() -> WebViewController {

    let vc = WebViewController()
    return vc
}   
}

/////используй это

 let webvc = WebViewController.initController()
 webvc.url = "http://apple.com"
 self.navigationController?.pushViewController(webvc, animated: true)

Ответ 5

Альтернатива WebView:

import SafariServices

let webViewController = SFSafariViewController(url: url)
webViewController.preferredControlTintColor = .primaryTintColor
present(webViewController, animated: true, completion: nil)