J'ai un UIViewController
avec UIWebViewDelegate
. J'ai trouvé que je peux le présenter très bien mais pas le pousser. Si j'essaie de le pousser, le contrôleur de vue cible charge et exécute n'importe quel jeu de variables, mais ne déclenche pas viewDidLoad()
et retourne simplement à mon contrôleur de vue de menu appelant sans erreur.Swift 3. Peut présenter un UIViewController avec UIWebViewDelegate mais ne pas le pousser
J'ai défini un point d'arrêt sur la première déclaration var après la classe et j'ai parcouru le code. Quand il est arrivé à init WebView, il a flashé le contrôleur de la maison (pas la cible) dans le simulateur et ensuite continué les déclarations var avant de revenir à mon contrôleur de vue de la maison.
Voici mon code de menu
œuvres:
let myWebViewController = MyWebViewController()
myWebViewController.urlString = "myUrl"
present(myWebViewController, animated: true, completion: nil)
ne fonctionne pas
let myWebViewController = MyWebViewController()
myWebViewController.urlString = "myUrl"
let navController = (UIApplication.shared.delegate as! AppDelegate).navController
navController!.pushViewController(myWebViewController, animated: true)
Voici mon expurgée code du contrôleur de vue cible. L'URL à charger est définie dans le menu.
import UIKit
class MyWebViewController: UIViewController, UIWebViewDelegate {
var urlString: String = "invalid url"
var url: URL {
return URL(string: urlString)!
}
var urlRequest: URLRequest {
var urlRequest = URLRequest(url: url)
return urlRequest
}
let webView: UIWebView = {
let view = UIWebView()
view.backgroundColor = .white
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
// declare various buttons and stack views
override func viewDidLoad() {
super.viewDidLoad()
webView.delegate = self
contentStackView.addArrangedSubview(webView)
mainStackView.addArrangedSubview(contentStackView)
view.addSubview(mainStackView)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
webView.loadRequest(urlRequest as URLRequest)
}
Pourriez-vous afficher plus de code? L'expression 'present (myWebViewController ...' est ou 'navController!pushViewController' n'a pas de sens si vous ne montrez pas d'où provient la variable 'myWebViewController' - et je suppose que quelque part, dans le code que vous n'avez pas montré, c'est _exactement_ la source du problème. - De même, revenez à travers tout votre code et faites en sorte que toutes les _classes commencent par une majuscule_. Donc, ce serait une variable 'myWebViewController' dont le type est' MyWebViewController'. – matt
Le nom de la classe minuscule était une faute de frappe seulement ici. J'ai mis à jour ma question pour ajouter plus de code. – markhorrocks
Étant donné que la vue cible commence à charger, je ne pense pas que le code de menu soit le problème, mais cela peut être faux. – markhorrocks