【发布时间】:2017-03-25 18:31:54
【问题描述】:
我有一个UIViewController 和UIWebViewDelegate。我发现我可以很好地呈现它,但不能推动它。如果我尝试推送它,目标视图控制器会加载并执行任何变量集,但不会触发 viewDidLoad(),而是返回到我的调用菜单视图控制器而不会出错。
我在类之后的第一个 var 声明上设置了一个断点,并单步执行了代码。当它到达 webView init 时,它会在模拟器中闪现主(非目标)视图控制器,然后继续通过 var 声明,然后返回我的主视图控制器。
这是我的菜单代码
作品:
let myWebViewController = MyWebViewController()
myWebViewController.urlString = "myUrl"
present(myWebViewController, animated: true, completion: nil)
没用
let myWebViewController = MyWebViewController()
myWebViewController.urlString = "myUrl"
let navController = (UIApplication.shared.delegate as! AppDelegate).navController
navController!.pushViewController(myWebViewController, animated: true)
这是我编辑的目标视图控制器代码。要加载的 URL 在菜单中设置。
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)
}
【问题讨论】:
-
你能显示更多代码吗?
present(myWebViewController...is ornavController!.pushViewControlleris 或navController!.pushViewController是没有意义的,如果你不显示你从哪里得到变量myWebViewController- 我怀疑那里的某个地方,在你没有显示的代码中,是 exactly 问题的根源。 — 另外,请返回所有代码并让所有类都以大写字母开头。所以这将是一个变量myWebViewController,其类型为MyWebViewController。 -
小写的类名在这里只是一个错字。我已更新我的问题以添加更多代码。
-
由于目标视图开始加载,我认为菜单代码不是问题,但这可能是错误的。
-
我不明白问题是什么,也不明白你的代码应该如何工作。您的 MyWebViewController 不包含实际将 UIWebView 放入界面、获取 URL 或任何有用的代码。
-
添加了更多代码。呈现目标视图控制器效果很好。
标签: uiviewcontroller swift3 uiwebviewdelegate