问题描述
import UIKit
class TableViewControllerOne: UITableViewController {
let musicArray = ["Old Town Road","Starboy"]
var songName = ""
override func viewDidLoad() {
super.viewDidLoad()
}
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation,return the number of sections
return 1
}
override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation,return the number of rows
return musicArray.count
}
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell",for: indexPath)
cell.textLabel!.text = musicArray[indexPath.row]
//here is the problem
songName = cell.textLabel!.text!
return cell
}
override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
var vc = segue.destination as! ViewControllerOne
vc.songFinalName = self.songName
}
}
所以我正在做音乐播放器App,但是我不知道如何播放当前歌曲。我有所有的歌曲连续(标识符是MyCell)。当我单击名为“ Starboy”的单元格时,它应该获得该名称并将数据传递给另一个VC并在那里播放它,但始终只播放原始图像中的最新内容,因此例如3首歌曲:Old Town Road,Starboy,Hello,它只能播放最新的歌曲,因此在此示例中为Hello。有人可以帮助我吗?谢谢您的阅读。
解决方法
您需要实现表格视图的委托方法didSelectRowAt
,该方法将在用户点击表格视图的任何行时更新songName
属性
public func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
songName = musicArray[indexPath.row]
}
此外,从songName = cell.textLabel!.text!
方法中删除cellForRowAt: indexPath