web-dev-qa-db-ja.com

SwiftでプログラムによってwebViewsを作成する

ViewControllerに画像ギャラリーのようなものを作成したいと思います。これには、JSONリクエストから取得する画像の数に応じて、複数のwebViewが必要になります。必要に応じて新しいwebViewを挿入するにはどうすればよいですか?

enter image description here

上の画像を見るとわかるように、ViewController内にscrollViewと1つのUIWebViewがあります。必要に応じて、最初の(2番目、3番目など)内に新しいwebViewをどのように作成しますか?出来ますか?

11
Orkhan Alizade

プログラムで可能な限り簡単にWebビューを作成できます。このコードを使用します

override func viewDidLoad() {
    super.viewDidLoad()
    let webV:UIWebView = UIWebView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height))
    webV.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.google.co.in")))
    webV.delegate = self;
    self.view.addSubview(webV)
}

このデリゲート関数を使用したい場合

func webView(webView: UIWebView!, didFailLoadWithError error: NSError!) {
    print("Webview fail with error \(error)");
}
func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool {
    return true;
}
func webViewDidStartLoad(webView: UIWebView!) {
    print("Webview started Loading")
}
func webViewDidFinishLoad(webView: UIWebView!) {
    print("Webview did finish load")
}
24

Swift 3の場合:

override func viewDidLoad() {
    super.viewDidLoad()
    let webV    = UIWebView()
    webV.frame  = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
    webV.loadRequest(NSURLRequest(url: NSURL(string: "https://www.Apple.com")! as URL) as URLRequest)
    webV.delegate = self
    self.view.addSubview(webV)
}

参考:@Deepakraj Murugesanの回答に基づく

6
kurrodu

UIWebViewはおそらく画像の表示に使用すべきものではありませんが、数行のコードで作成できます。

let webView = UIWebView(frame: someFrame)
webView.loadRequest(NSURLRequest(URL: someURL!))
view.addSubview(webView)
2
budidino

あなたはそれを行うことができません、元々、webviewは大量のメモリを消費します。それをいくらか使用すると、悪い経験につながる可能性があります。なぜImageViewを使用しないのですか?

0
Burning

SDWebImage + UIImageViewが役立つと思います。参照: https://github.com/rs/SDWebImage

0
John Lee

Swift 4の場合:

webView = WKWebView()
webView.navigationDelegate = self
view = webView

let url = URL(string: "https://www.earthhero.org")!
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true

さらに、WebKitをインポートし、WKNavigationDelegateをクラスに追加する必要があります。

0
Ben