gpt4 book ai didi

swift - 如果在 TableView didSelectRowAtIndexPath 函数中选择了其他行,如何将图像更改为以前的状态?

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:00 25 4
gpt4 key购买 nike

所以我有动态 TableView ,每一行都有播放图像。如果我选择行图像将更改为暂停图标。但是如果我选择另一行怎么办,我需要先前选择的行上的图像再次具有播放图标。如何处理这样的功能?

我只有:

     class ViewController: UIViewController {
var stations = [
(stationIcon: "rr_icon", stationName: "Radio1", urlString: "http://.._320", isPlaying: false),
(stationIcon: "mm_icon", stationName: "Record2", urlString: "http://../_320", isPlaying: false),
........]

func playSelectedStation(indexPath: NSIndexPath) {
let url = NSURL(string: stations[indexPath.row].urlString)!
stations[indexPath.row].isPlaying = true
avPlayer = AVPlayer(URL: url)
avPlayer.play()
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! RadioTableViewCell
cell.playPause.image = stations[indexPath.row].isPlaying ? UIImage(named: "cellPause") : UIImage(named: "cellPlay")
return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

switch indexPath.row {
playSelectedStation(indexPath)
tableView.reloadData()

广播电台的变化没有问题,只有播放/暂停图标状态有问题

最佳答案

您可以通过遍历可见单元格并禁用除用户刚刚点击的单元格之外的所有单元格中的播放按钮来实现它:

class PlayItem {
// your code
var isPlaying = false
}

class RadioTableViewCell: UITableViewCell {

// your code ....

func setup(item item: PlayItem) {
image = item.isPlaying ? UIImage(named: "cellPause") : UIImage(named: "cellPlay")
}
}

在你的委托(delegate)中:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.cellForRowAtIndexPath(indexPath) as! RadioTableViewCell
let item = items[indexPath.row] // you may think of storing this array in some kind of view model
cell.setup(item: item)
return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let selectedCell = tableView.cellForRowAtIndexPath(indexPath) as! RadioTableViewCell
let selectedItem = items[indexPath.row]
selectedItem.isPlaying = !selectedItem.isPlaying

for cell in tableView.visibleCells {
guard let visibleCell = cell as? RadioTableViewCell else { return }
let path = tableView.indexPathForCell(visibleCell)
let item = items[path.row]
item.isPlaying = visibleCell == selectedCell
visibleCell.setup(item: item)
}
}

更新:我更新了我的答案以将播放状态存储在项目中。

关于swift - 如果在 TableView didSelectRowAtIndexPath 函数中选择了其他行,如何将图像更改为以前的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38390281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com