将使用两者之一。哪一个是未定义的。从表视图导航到 Web 视图

Posted

技术标签:

【中文标题】将使用两者之一。哪一个是未定义的。从表视图导航到 Web 视图【英文标题】:One of the two will be used. Which one is undefined. Navigating from Table View to Web View 【发布时间】:2017-06-15 01:39:22 【问题描述】:

我正在尝试制作一个应用程序,使用户能够从表格中选择一个网站以访问该网站。我有一个嵌入在导航控制器中的 UITableViewController 以及从表格单元格到 Web 视图的 segue。但是每次我从表格视图中单击一个网站时,它都会将我带到一个空白页面一秒钟,然后再到我的网站。我希望能够直接进入网页,中间没有空白视图。我该怎么办?谢谢!

TableViewController 代码:

import UIKit

class WebTableViewController: UITableViewController 

    var websites = [Website]()

    override func viewDidLoad() 
        super.viewDidLoad()
        websites = WebsiteList.getAllWebsites()
    

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return websites.count
    

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        let website = websites[indexPath.row]
        cell.textLabel?.text = website.name
        return cell
    

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        if let vc = storyboard?.instantiateViewController(withIdentifier: "Website") as? WebsiteViewController
            vc.selectedWebName = websites[indexPath.row].name
            navigationController?.pushViewController(vc, animated: true)
        
    

WebViewController 代码:

import UIKit
import WebKit

class WebsiteViewController: UIViewController 

    var webView: WKWebView!
    var selectedWebName = String()
    override func viewDidLoad() 
        super.viewDidLoad()
        title = selectedWebName

        webView = WKWebView()
        view = webView
        if let url = URL(string: "https://" + selectedWebName)
            webView.load(URLRequest(url: url))
        
        webView.allowsBackForwardNavigationGestures = true
    

网站结构:

import Foundation

struct Website
    var name: String


struct WebsiteList
    static func getAllWebsites() -> [Website]
        return [
            Website(name: "youtube.com"),
            Website(name: "apple.com"),
            Website(name: "hackingwithswift.com")
        ]
    

Web view

A blank page between table view and web view after clicking on the back arrow from the previous view

【问题讨论】:

不是因为页面仍在加载/初始化您的 webView 这就是为什么您有“空白屏幕”吗?只是我的猜测 【参考方案1】:

如果您正在为 ios 8 或更高版本为您的 WebViewController 编写此代码,则应该导入 WebKit。

然后你的 UIWebView 变成了 WKWebView 并且 webView.loadRequest(URLRequest(url: url))

变成:webView.load((URLRequest(url: url))

这可能是我的偏好,但您不需要将 getAllWebsites 设为静态函数。如果您在视图控制器中实例化 WebSiteList,您可以调用该函数以及以后可能需要的任何其他函数。

【讨论】:

如果它回答了您的问题,您应该投票和/或将其标记为答案。很高兴能提供帮助。 问题没有解决所以我没有解决。我在代码下方添加了图片作为链接,以进一步阐明问题。

以上是关于将使用两者之一。哪一个是未定义的。从表视图导航到 Web 视图的主要内容,如果未能解决你的问题,请参考以下文章

两者都实现了类,将使用两者之一。哪个是未定义的

JavaLaunchHelper 类在... libinstrument.dylib 中都实现了。将使用两者之一。哪个是未定义的

Swift UITest - 将使用两者之一。哪个是未定义的

从表视图导航到表视图再到表视图 (iOS)

IOS - 从表视图控制器获取值并将其发送到另一个表视图控制器

如何从表视图控制器转到详细控制器并返回