我的表视图中有一个自定义单元格,其中包含一个按钮和音频文件的名称。当我按下按钮时,相关的音频正在播放,当再次点击时,音频停止。我的问题是当我点击相同的按钮时它是可以的,但是当我点击任何不同的按钮然后当前单元格然后我的过程不起作用。任何人都可以向我展示这样做的正确方向。我的代码如下。提前谢谢..
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?
}
答案 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!
}
}
谢谢大家的帮助! :)强>