如何在表格视图中切换按钮

时间:2016-02-23 05:49:33

标签: ios swift tableview

我的表视图中有一个自定义单元格,其中包含一个按钮和音频文件的名称。当我按下按钮时,相关的音频正在播放,当再次点击时,音频停止。我的问题是当我点击相同的按钮时它是可以的,但是当我点击任何不同的按钮然后当前单元格然后我的过程不起作用。任何人都可以向我展示这样做的正确方向。我的代码如下。提前谢谢..

var isAudioPlaying = false

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {     
        return designCellAtIndexPath(indexPath)    
    }

private func designCellAtIndexPath(indexPath: NSIndexPath) -> UITableViewCell { 
    let cell: UITableViewCell = NSBundle.mainBundle().loadNibNamed("ExtendedDesign", owner: self, options: nil)[4] as! UITableViewCell     
    cell.frame = CGRectMake(0.0, 0.0, UIScreen.mainScreen().bounds.size.width, cell.bounds.height)         
    cell.contentView.frame = cell.bounds      
    cell.selectionStyle = UITableViewCellSelectionStyle.None    

    btnPlayPause = cell.viewWithTag(1) as! subclassedUIButton        
    btnPlayPause.addTarget(self, action: "btnPlayPauseTapped:", forControlEvents: .TouchUpInside)              
    btnPlayPause.urlString = arrAttractionList[indexPath.row].audio.url             
    let lblAttractionName = cell.viewWithTag(2) as! UILabel          
    lblAttractionName.text = arrAttractionList![indexPath.row].name     
    return cell     
}

My Button Methode是:

func btnPlayPauseTapped(sender: subclassedUIButton) {    

    if !isAudioPlaying {      
        isAudioPlaying = true       
        sender.setImage(UIImage(named: "Button_Pause"), forState: .Normal)      
        AudioHandler.sharedManager().playAudio(sender.urlString)                 
    } else {     
        isAudioPlaying = false     
        sender.setImage(UIImage(named: "Button_Play_Menu.png"), forState: .Normal)   
        AudioHandler.sharedManager().audioPlayer?.pause()      
    }    
}   

// UIButton的Custome类

class subclassedUIButton: UIButton {      

    var indexPath: Int?        
    var urlString: String?       
}  

3 个答案:

答案 0 :(得分:1)

您必须管理您必须播放的当前小区音频的其他标志。设置当前单元格索引并管理它。

答案 1 :(得分:0)

let cell: UITableViewCell = NSBundle.mainBundle().loadNibNamed("ExtendedDesign", owner: self, options: nil)[4] as! UITableViewCell     

这不是将单元格添加到表格视图的正确方法。您应该在registerNib(_:forCellReuseIdentifier:)委托方法中致电viewDidLoad()(通常采用dequeueReusableCellWithIdentifier(_:forIndexPath:)方法),然后cellForRowAtIndexPath(_:)

如果您在故事板中使用模板设计单元格,则不需要registerNib(_:forCellReuseIdentifier:)

但您确实需要按照设计使用的方式使用表格视图。你现在拥有的东西似乎可以起作用,但是如果你不按照预期的方式使用表格视图,它会遇到问题并使你的生活变得悲惨。

此外,您不希望使用viewWithTag(_:)引用您的子视图。您想在Interface Builder中连接正确的IBOutlet。或者至少在UITableView子类中创建属性以访问子视图。

答案 2 :(得分:0)

最后我在这里做的是我的代码来做到这一点。首先在类中声明两个变量:

var currentCellIndex:int = -1
var previousCellIndex:int = -1

 func btnPlayPauseTapped(sender: subclassedUIButton) {    

    currentCellIndex = sender.indexPath!      
    if currentCellIndex == previousCellIndex {
        if !isAudioPlaying {                
            isAudioPlaying = true
            AudioHandler.sharedManager().stopAudioPlayer()
            sender.setImage(UIImage(named: "Button_Play_Menu.png"), forState: .Normal)
        } else {               
            isAudioPlaying = false
            AudioHandler.sharedManager().playAudio(sender.urlString)
            sender.setImage(UIImage(named: "Button_Pause"), forState: .Normal)
        }

    } else {
        let indexPath = NSIndexPath(forRow: previousCellIndex, inSection: 0)
        tblAttractinList.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
        isAudioPlaying = false
        sender.setImage(UIImage(named: "Button_Pause"), forState: .Normal)
        AudioHandler.sharedManager().playAudio(sender.urlString)
        previousCellIndex = sender.indexPath!
    }
}

谢谢大家的帮助! :)