gpt4 book ai didi

swift - 如何分配播放按钮以仅播放解析中的第一个对象?

转载 作者:行者123 更新时间:2023-11-30 14:13:03 36 4
gpt4 key购买 nike

我在 Parse 上有两首歌,我可以使用 swift 来播放它们,但我想要每个对象都有一个播放/暂停按钮。歌曲 1 应该有一个播放/暂停按钮,歌曲 2 应该有一个播放/暂停按钮,等等。我如何使每个按钮适用于 TableView 中的 x 对象?我已经尝试向 AudioPlayer.play() AudioPlayer.play(objectId[0]) 添加参数,但它不起作用。

    func playit (sender: UIButton!){
switch(state){
case 0:
AudioPlayer.play()
println("Playing");
let pauseimage = "pause"
play.setImage(UIImage(named: pauseimage), forState: .Normal)
state = 1
break;
case 1:
AudioPlayer.pause()
println("Paused");
let playimage = "player"
play.setImage(UIImage(named:playimage), forState: .Normal)
state = 0
break;

default: break;
}

}


var ObjectIDQuery = PFQuery(className: "Songs")
//find objects in background
ObjectIDQuery.findObjectsInBackgroundWithBlock({
//store objects in an array
(objectsArray: [AnyObject]?, error: NSError?) -> Void in

var objectIDs = objectsArray as! [PFObject]
NSLog("\(objectIDs)")
//objects being added to idArray
for i in 0...objectIDs.count-1{
//add a new element in the array
self.iDArray.append(objectIDs[i].valueForKey("objectId")as! String)
//store song name in song array
self.NameArray.append(objectIDs[i].valueForKey("Name")as! String)
self.tableView.reloadData()

}
})


}

//select a certain song from tableview
func grabSong(){
var SongQuery = PFQuery(className: "Songs")
//taking x object from idArray depending on which cell is selected
SongQuery.getObjectInBackgroundWithId(iDArray[SelectedSongNumber], block: {
//store object inside pfobject
(object: PFObject?, error: NSError?) -> Void in
//take objects grabbed and put in audioplayer
if let AudioFileURLTemp = object?.objectForKey("File")?.url{
AudioPlayer = AVPlayer(URL: NSURL(string: AudioFileURLTemp!))
AudioPlayer.play()

}
})
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return iDArray.count

}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell

cell.textLabel?.text = NameArray[indexPath.row]
return cell
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
SelectedSongNumber = indexPath.row
grabSong()
}

最佳答案

因此,如果您的每首歌曲当前在 UITableView 中都有一个 UITableViewCell,您应该尝试在每个单元格中嵌入一个 UIButton。首先在单独的文件中创建一个自定义 UITableViewCell。在我的示例中,我将一个 UIButton 拖到 Storyboard 中的原型(prototype)单元中,并将其放置在我想要的位置。然后在新文件中创建一个自定义 UITableViewCell,假设为 MyCustomCell.swift。不要忘记将 Storyboard 中的原型(prototype)单元与自定义单元类连接起来。然后将按钮从 Storyboard 中拖动到:

class MyCustomCell: UITableViewCell{
@IBOutlet weak var playButton: UIButton!
//Declare other cell attributes here
// ......
}

然后您可以在 cellForRowAtIndexPath 函数中执行此操作:

       override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! MyCustomCell

cell.textLabel?.text = NameArray[indexPath.row]

cell.playButton.layer.setValue(indexPath.row, forKey: "index")
cell.playButton.addTarget(self, action: "playSong:", forControlEvents: UIControlEvents.TouchUpInside)
return cell
}

并在您的 UITableViewController 文件中创建函数:

func playSong(sender: UIButton){
let cellIndex : Int = (sender.layer.valueForKey("index")) as! Int
//You now have the index of the cell whose play button was pressed so you can do something like
//arrayOfSongs[cellIndex].play
self.tableView.reloadData()
}

关于swift - 如何分配播放按钮以仅播放解析中的第一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31533814/

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