Je viens donc de mettre à jour le nouveau Xcode8
et Swift3
mais maintenant, ma vue Web ne fonctionne pas. Voici le code que j'ai utilisé:
UIWebView.loadRequest(webView)(NSURLRequest(URL: NSURL(string: "http://hardwirestudios.com")!))
Maintenant, me donne ces deux erreurs:
'NSURL' n'est pas implicitement convertible en 'URL'; vouliez-vous utiliser "en tant que" pour convertir explicitement? - "NSURLRequest" n'est pas implicitement convertible en "URLRequest"; vouliez-vous utiliser 'en tant que' pour convertir explicitement?
Pour cette situation exacte, retapez votre ligne pour:
yourWebView.loadRequest(URLRequest(url: URL(string: "http://hardwirestudios.com")!))
... et renommez yourWebView
variable en une variable que vous utilisez réellement.
Dans Swift 3.0, utilisez URL et RLRequest comme presque tous les NS
ont été largués.
'UIWebView' est obsolète dans iOS 12.0: n'est plus pris en charge; s'il vous plaît adopter WKWebView.
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)
}
}
}
Tableau principal
<?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>
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
ajoutez dans votre paramètre de sécurité de transport Info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
classe 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)
}
}
}
Une classe de webview dynamique avec chargement:
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
}
}
///// utilise le
let webvc = WebViewController.initController()
webvc.url = "http://Apple.com"
self.navigationController?.pushViewController(webvc, animated: true)
Une alternative à WebView:
import SafariServices
let webViewController = SFSafariViewController(url: url)
webViewController.preferredControlTintColor = .primaryTintColor
present(webViewController, animated: true, completion: nil)