TableView行不会将数据带入新部分

时间:2018-11-20 17:20:58

标签: swift uitableview

我是一位退休的高中老师,他整理了一个化学应用程序,其中包括我的在线视频。我已经创建了一个表,该表的各个部分都链接到Web视图页面...除了一件事情外,它非常成功:在第一部分之后的部分中出现的第一单元格行(称为化合物和反应)将不会链接还原为适当的视频,但会再次显示第一部分中的第一个视频。新部分的第二行将显示第一部分中的第二个视频,以此类推。(例如:在“化合物和反应”部分中选中元素周期表视频时不会出现问题,但是当我选择“元素周期表”时也会出现我确信在下面的代码中此部分没有正确的代码(cell!.textLabel?.text = sectionData [indexPath.section]![indexPath.row]),但我相信不确定。任何帮助将不胜感激这个新手。干杯!

import UIKit

class CompoundsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    let sections: [String] = ["Compounds and Reactions", "Stoichiometry"]
    let s1Data: [String] = ["Periodic Table", "Molecules", "Ionic Compounds","Polyatomic Ions"]
    let s2Data: [String] = ["Hydrates", "Acids"]

    var sectionData: [Int: [String]] = [:]




    @IBOutlet weak var tableView: UITableView!
    var videos:[Video] = [Video]()
    var selectedVideo:Video?

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        let model = VideoModel()
        self.videos = model.getVideos()

        self.tableView.dataSource = self
        self.tableView.delegate = self

        sectionData = [0 : s1Data, 1 : s2Data]
    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return (sectionData[section]?.count)!
    }

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return sections[section]

    }


    func numberOfSections(in tableView: UITableView) -> Int {
        return sections.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "cell")

        if cell == nil {
            cell = UITableViewCell(style: .default, reuseIdentifier: "cell");
        }


        //Customize the cell to display the video title
        cell!.textLabel?.text = sectionData[indexPath.section]![indexPath.row]

        return cell!
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        self.selectedVideo = self.videos[indexPath.row]

        //Took note of which video the viewer selected
        //Call the segue
        self.performSegue(withIdentifier: "goToDetail", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        let detailViewController = segue.destination as! VideoDetailViewController

        detailViewController.selectedVideo = self.selectedVideo
    }

}

1 个答案:

答案 0 :(得分:0)

您可能想说一下,例如indexPath.section是否等于0,则从第一个数组中获取数据;而当indexPath.row等于1时,则从该数组中获取数据。为此,您可以创建数组数组。

var videos = [["Periodic Table", "Molecules", "Ionic Compounds","Polyatomic Ions"], ["Hydrates", "Acids"]]

因此,在TableView委托方法中,您可以获取取决于部分索引的数组,而此数组中的项取决于行索引:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.selectedVideo = self.videos[indexPath.section][indexPath.row]
    self.performSegue(withIdentifier: "goToDetail", sender: self)
}

或者,您可以创建自定义数据模型。