我是一位退休的高中老师,他整理了一个化学应用程序,其中包括我的在线视频。我已经创建了一个表,该表的各个部分都链接到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
}
}
答案 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)
}
或者,您可以创建自定义数据模型。