Swift:(预)从 initialViewController 加载 UIWebView
Posted
技术标签:
【中文标题】Swift:(预)从 initialViewController 加载 UIWebView【英文标题】:Swift: (Pre-)load UIWebView from initialViewController 【发布时间】:2016-05-09 13:24:13 【问题描述】:我有两个 ViewController。初始 ViewController 是输入和存储 URL 的位置。这个初始 ViewController 的 viewDidLoad 也应该在应用启动时开始为第二个 ViewController 加载网页内容。
secondViewController 仅包含一个 WebView。
当我启动应用程序时,成功调用了 secondViewController 中的 func loadWebView。但是,一旦我单击 goButton 以呈现 secondViewController。它是空的。 (在secondViewController viewDidLoad本地调用func loadWebView会成功加载网站。)
我认为我在实例化 secondViewController 的方式和调用它的方式上做错了。我想我以某种方式创建了 secondViewController 的两个不同实例并调用了空的实例。我会很高兴任何指针。
编辑:我希望应用程序在打开初始 ViewController 后立即开始加载网站。不仅在我访问 secondViewController 时。
EDIT2:问题可能是 webView.loadRequest(request) 的初始调用的数据没有保存到 webView-subview 吗?第二次调用 webView 时它出现空白,因为没有保存数据。有谁知道如何从 loadRequest 调用中保存/加载数据?
EDIT3:忘记 EDIT2。阅读解决方案正确答案下方的 cmets!
初始视图控制器:
var svc: UIViewController = UIViewController()
override func viewDidLoad()
loadWebView("https://www.google.com")
func loadWebView(URLString:String)
if let theRequestURL = NSURL (string: URLString)
let theRequest = NSURLRequest (URL: theRequestURL)
let vc: secondViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("secondViewController") as! secondViewController
vc.loadWebView(theRequest)
svc = vc
@IBAction func goButton(sender: AnyObject)
self.presentViewController(svc, animated: false, completion: nil)
secondViewController:
class secondViewController: UIViewController, UIWebViewDelegate
@IBOutlet var webView: UIWebView! = UIWebView()
func loadWebView(request : NSURLRequest)
webView.loadRequest(request)
【问题讨论】:
【参考方案1】:我不太确定secondViewController
的两个实例,但可能webView
的两个实例...假设您在情节提要中定义了一个。实例化 IBOutlet
是异常/错误的。
我建议将loadWebView
变成storeRequestURL
之类的东西。将请求保存到一个实例变量,然后在secondViewController
的viewWillAppear
(或者可能是viewDidLoad
)中调用loadRequest
。
【讨论】:
我是否错误地假设您的建议 loadRequest 只会在调用 secondViewController 时启动?我希望在打开 initialViewController 后立即加载网站。基本上已经预加载了网站,所以当我转到 secondViewController 时它会立即出现。 在这种情况下,您可能会尝试不将 Web 视图设为插座,并且(因此)不在情节提要中定义/连接它。相反,您可以在代码中创建它——就像现在一样——然后在视图加载后将它作为子视图添加到控制器的视图中。 (然后您的代码负责大小和定位。) 我从情节提要中删除了 WebView,它是 secondViewController 的出口。创建var webView: UIWebView = UIWebView(frame: CGRectMake(0, 20, 420, 725))
并调用 viewWillAppear self.view.addSubview(webView)
。但是,情况和以前一样。当从初始 ViewController 调用时,WebView 出现空白。在 secondViewController 的 viewDidLoad 中运行 loadWebView 会显示站点。
您认为问题可能是webView.loadRequest(request)
的初始调用的数据没有保存到webView
子视图?第二次调用webView
时它出现空白,因为没有保存任何数据。你知道如何保存来自loadRequest
调用的数据吗?
发生了一些我们没有看到的事情。我刚刚创建了一个新项目并使用代码设置它以匹配您从“我删除了 WebView ...”开始的评论,它对我来说很好。当我点击按钮时,我得到了谷歌页面。您的按钮是否真的与动作相关联?如果你使用 Xcode 的 View Debugging,你会在屏幕上看到你的 web view 吗?以上是关于Swift:(预)从 initialViewController 加载 UIWebView的主要内容,如果未能解决你的问题,请参考以下文章
在 UIPageViewControllers (Swift) 中预加载所有 UIViewControllers