单击另一个按钮 swift 2.2 更改声音按钮图像

Posted

技术标签:

【中文标题】单击另一个按钮 swift 2.2 更改声音按钮图像【英文标题】:Change sound button image on clicking another button swift 2.2 【发布时间】:2019-10-12 04:01:09 【问题描述】:

我正在创建一个 Tableview 里面是 Tableviewcell 并且在单元格上有一个标签和声音按钮。对于每个标签,按钮单击时都会发出声音。当我第一次在 btn1 上单击时,声音播放并且按钮图像更改为“暂停”,当我再次单击时,相同的按钮声音停止并且图像更改为“播放”以这种方式完美运行,但是当我单击第一个一个按钮的时间让假设 btn1 并且没有再次单击它(停止声音)我单击 btn2,btn1 的声音停止并且 btn1 和 btn2 的图像发生变化。我希望当我单击 btn 2,3 或 4 时,前一个声音应该停止,前一个按钮的图像(表示除当前按钮之外的所有按钮)应该更改为“播放”,当前单击的按钮应该更改为“暂停”并且上一次点击的声音应该停止并且当前点击应该播放。

import UIKit

class TableViewCell: UITableViewCell 

    @IBOutlet weak var titleLable: UILabel!
    @IBOutlet weak var sound: UIButton!
    override func awakeFromNib() 
        super.awakeFromNib()
    

class ViewController: UIViewController , UITableViewDataSource , UITableViewDelegate , GADInterstitialDelegate 

    var countsNumberOfButtonClicks = 0
    var countsNumberOfInfoBtnClicks = 0
    var isFirstTime = false
    var player : AVAudioPlayer! = nil
    var titleAlert: String!

    @IBOutlet weak var myTableView: UITableView!
    var toggleState = 1


 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell.

    

    let myCell = self.myTableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as! TableViewCell

        myCell.titleLable.text = self.Duck[indexPath.row]

        myCell.sound.tag = indexPath.row
        myCell.sound.addTarget(self, action: #selector(self.playSound), forControlEvents: .TouchUpInside)
     return myCell
    

   @IBAction func playSound(sender: UIButton) 

            if toggleState == 1 
            let fullName: String = self.Duck[sender.tag]
            let fullNameArr = fullName.componentsSeparatedByString(" ")
            let path = NSBundle.mainBundle().pathForResource(fullNameArr[0], ofType:"wav", inDirectory: "sounds")
            let fileURL = NSURL(fileURLWithPath: path!)
            do 
                player = try AVAudioPlayer(contentsOfURL: fileURL)
                player.prepareToPlay()
             catch 
                print("Problem in getting File")
                 
            player.play()
            sender.setImage(UIImage(named: "pause.png"), forState: UIControlState.Normal)
            print("toggle state 1")
            toggleState = 2
        
        else 
            player.pause()
            toggleState = 1
            sender.setImage(UIImage(named: "play.png"), forState: UIControlState.Normal)
            print("Toggle state else")
 

Simulator result

【问题讨论】:

大多数人早就忘记了 Swift 2。 我在 2016 年使用了 3 年我现在停止开发几天前我又开始了这就是为什么 swift2.2 【参考方案1】:

在你的类中,声明一个变量,

var currentlyPlaying : UIButton?

无论你在哪里播放声音,都将播放声音的按钮存储在这个变量中,每当这个变量即将改变时,重置之前的图像并存储新的图像。

@IBAction func playSound(sender: UIButton) 

        if currentlyPlaying != sender || toggleState == 1 

        //Set image in previous
        currentlyPlaying?.setImage(UIImage(named: "play.png")

        if player != nil
            player.pause()
        

        let fullName: String = self.Duck[sender.tag]
        let fullNameArr = fullName.componentsSeparatedByString(" ")
        let path = NSBundle.mainBundle().pathForResource(fullNameArr[0], ofType:"wav", inDirectory: "sounds")
        let fileURL = NSURL(fileURLWithPath: path!)
        do 
            player = try AVAudioPlayer(contentsOfURL: fileURL)
            player.prepareToPlay()
         catch 
            print("Problem in getting File")
             
        player.play()


        sender.setImage(UIImage(named: "pause.png"), forState: UIControlState.Normal)

        //Store new
        currentlyPlaying = sender

        print("toggle state 1")

        if sender != currentlyPlaying
            toggleState = 2
        

        myTableView.reloadData()

    
    else 
        player.pause()
        toggleState = 1
        sender.setImage(UIImage(named: "play.png"), forState: UIControlState.Normal)
        print("Toggle state else")

【讨论】:

评论不用于扩展讨论;这个对话是moved to chat。 再次单击同一按钮不会停止声音,也不会将图像更改为暂停。我尝试了编辑后的代码

以上是关于单击另一个按钮 swift 2.2 更改声音按钮图像的主要内容,如果未能解决你的问题,请参考以下文章

按下另一个按钮后,列表磁贴按钮会更改状态

Swift:如何在单击提交按钮时更改 UIButton 图像

Swift - 想要在单击集合视图单元格内的按钮时进行更改

Swift - 音频 - 按钮声音不断出错

如何在 swift 中单击按钮时更改 uiimage 的图像?

单击另一个按钮时更改按钮背景