1
votes

Passer l'URL du champ de texte à la vue Web dans le deuxième contrôleur

J'essaie de créer un navigateur très basique pour une utilisation en interne dans mon entreprise. C'est le premier vrai code que j'ai écrit en Swift, donc très débutant et s'appuyant sur des tutoriels. J'ai réussi à obtenir du texte à afficher sur un deuxième contrôleur et j'aimerais maintenant l'utiliser pour charger une vue Web.

la configuration

import UIKit
import WebKit

class BrowserController: UIViewController {

    @IBOutlet weak var label: UILabel!

    var urlString = String()

    override func viewDidLoad() {
        super.viewDidLoad()

        label.text = urlString

        // Do any additional setup after loading the view.
    }
}

}

C'est là que je me perds - comment puis-je transformer cette URLString en quelque chose que la vue Web peut ensuite charger?

Tout ce que j'ai jusqu'à présent dans le deuxième contrôleur est

class ViewController: UIViewController {

@IBOutlet weak var urlField: UITextField!
@IBAction func launch(_ sender: Any) {
    if urlField.text != "" {
        performSegue(withIdentifier: "launch", sender: self)
    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let secondController = segue.destination as! BrowserController
    secondController.urlString = urlField.text!
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

Toute aide grandement appréciée!


1 commentaires

Si je comprends bien, vous voulez changer urlString en quelque chose que la vue Web peut lire, vous devez alors initialiser un objet URL à partir de cette chaîne. Voir ce message: stackoverflow.com/a/32183827/5464805


4 Réponses :


1
votes

Remplacez votre deuxième contrôleur de vue par quelque chose comme ci-dessous

 import UIKit
    import WebKit

    class BrowserController: UIViewController, WKNavigationDelegate {

        @IBOutlet weak var label: UILabel!
        var urlString = String()
        var webView : WKWebView!

        override func viewDidLoad() {
            super.viewDidLoad()

            label.text = urlString

            // Do any additional setup after loading the view.
            //Load the webview
            loadPage();
        }

        func loadPage(){
           let url = NSURL(string: myBlog)
           let request = NSURLRequest(URL: url!)

           // init and load request in webview.
           webView = WKWebView(frame: self.view.frame)
           webView.navigationDelegate = self
           webView.loadRequest(request)
           self.view.addSubview(webView)
        }

        //MARK:- WKNavigationDelegate
        func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
           print(error.localizedDescription)
        }

     func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
           print("Strat to load")
       }
     func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
           print("finish to load")
       }
}


1 commentaires

Parfait - cela a fonctionné (avec quelques changements mineurs). Merci beaucoup!



1
votes
import UIKit

class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var webView: UIWebView!
    var urlString = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        webView.delegate = self
        if let url = URL(string: urlString!) {
            let request = URLRequest(url: url)
            webView.loadRequest(request)
        }
    }
}

1 commentaires

Merci de prendre le temps de répondre. On dirait que UIWebView est désormais obsolète et que je n'ai pas pu faire fonctionner le code avec WKWebView. Mais merci tout de même.



0
votes

Si vous souhaitez ouvrir le site Web dans BrowserController, après avoir obtenu l'URL de textfield de ViewController, utilisez ce code dans votre BrowserController

import UIKit
import SafariServices

class BrowserController: UIViewController {
//@IBOutlet weak var label: UILabel!

var urlString = String()

override func viewDidLoad() {
    super.viewDidLoad()

    label.text = urlString

    guard let url = URL(string: urlString ?? "") else { return }
    let svc = SFSafariViewController(url: url)
    present(svc, animated: false, completion: nil)
}
}

C'est le moyen le plus simple d'ouvrir le navigateur à partir de l'application.

/ p>


1 commentaires

Je n'ai pas pu faire fonctionner celui-ci non plus, mais merci d'avoir pris le temps de poster.



0
votes

Dans le cas où vous envisagez d'avoir une liste de tableaux où le clic pourrait mener au site Web, consultez ce tutoriel que j'écris.

https://daddycoding.com/ 2017/10/17 / ios-tutoriels-triggering-tableviewcell-visit-site /


0 commentaires