使用UITableView选择行时,如何显示不同的结果?

时间:2018-04-14 17:19:08

标签: ios swift uitableview

我所拥有的是一个包含大约5个单元格的表视图。每个都有不同的标题,我想要的是当用户点击某个单元格时,弹出某个与他们点击的标题相关的YouTube视频(所有单元格都有不同的标题)。我正在使用WKWebView,现在只要点击一行就会弹出Youtube视频,但无论点击什么行/标题,它都是相同的Youtube视频。如何根据点击的行来获取不同的视频?

这是包含单元格/标题的ViewController的代码,它移动到的下一个视图控制器只是一个使用WebKit显示带有链接的Youtube Vid的文件。

import UIKit

class ViewController: UITableViewController {

    var motivationalVideoOptions = ["Work Hard And Be Patient", "Put Yourself In A Position To Succeed", "Stop Judging Yourself", "Lose The Battle But Win The War", "Top 10 Rules For Success"]

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationController?.navigationBar.prefersLargeTitles = true
        title = "Choose a video"
    }

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

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

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 80
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let vc = storyboard?.instantiateViewController(withIdentifier: "VideoPlay") as? VideoPlayViewController {
            navigationController?.pushViewController(vc, animated: true)
        }
    }

}

其他View Controller类:

import UIKit
import WebKit

class VideoPlayViewController: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!
    var progressView: UIProgressView!

    override func loadView() {
        webView = WKWebView()
        webView.navigationDelegate = self
        view = webView
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        let url = URL(string: "https://youtu.be/T_aFqEmL5JI")!
        webView.load(URLRequest(url: url))
        webView.allowsBackForwardNavigationGestures = true

    }
}

2 个答案:

答案 0 :(得分:0)

它只会转到一个视频的原因是因为您将网址设置为常量链接。将基于标题的变量或具有表视图单元格数据的变量放入url中。我现在正打电话,所以请耐心等待。

示例:

我触摸带有链接的子标题的单元格。我引用了Web视图并设置了视图子标题的链接。然后事情会加载变量链接。这给你想要的结果

答案 1 :(得分:0)

我在您的代码中看到的是,您在VideoPlayViewController中传递了一个constanr youtube网址。

您需要做的是在VideoPlayViewController中创建一个var,并将值分配给您在ViewController中的didSelectRowAt方法中创建的VC实例上的var。

例如: 您可以拥有一个结构或类,而不是在motivationalVideoOptions中使用字符串值。拥有2个变量title和Url。根据选择,您可以从数组中获取项目并传递url变量。