web-dev-qa-db-ja.com

Swift 3 WebView

そのため、新しいXcode8およびSwift3に更新しましたが、今ではWebビューが機能しません。私が使用したコードは次のとおりです。

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

次の2つのエラーが表示されます。

「NSURL」は暗黙的に「URL」に変換できません。 「as」を使用して明示的に変換するつもりでしたか?-「NSURLRequest」は「URLRequest」に暗黙的に変換できません。 「as」を使用して明示的に変換するつもりでしたか?

25
Matt.Owen

このような状況では、次のように行を再入力してください。

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

... yourWebView変数の名前を実際に使用するものに変更します。

Swift 3.0では、ほとんどすべてのNSがドロップされたため、URLおよびRLRequestを使用します。

37
pedrouan

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サンプル

26

クラス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
Komal Gupta

ロードを伴う動的なwebviewクラス:

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)
2
Ashkan Ghodrat

WebViewの代替:

import SafariServices

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