回答編集履歴

1 s修正

_Kentarou

_Kentarou score 8250

2016/09/02 08:21  投稿

セルのボタン押下アクションをセルで処理するようにして、セルを生成するときの`NSIndexPath`から`fileName`を取得すると再生されると思います。
セルのボタンアクションをセルに結んでください。
`delegate`を使用して`ViewController`の処理を呼び出しています、`cell`生成時にセルに`index`を渡して`Delegateメソッド`を呼び出す時の引数に更に渡しています。
```swift
import UIKit
import AVFoundation  
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, CustomTableViewCellDelegate {
   
   let imageNames = ["futako.jpg", "yokado.jpg", "fran.jpg", "zikken.jpg"]
   
   let imageTitles = ["イヌ2", "ネコ2", "イヌ1", "イヌ2"]
   var audioPlayer = AVAudioPlayer()  
   
   let imageDescriptions = [
       "イヌ",
       "ネコ",
       "イヌ",
       "イヌ"
   ]
   
   override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view, typically from a nib.
   }
   
   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
   }
   
   func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return imageNames.count
   }
   
   func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
       
       let cell = tableView.dequeueReusableCellWithIdentifier("MyCell") as! CustomTableViewCell
       
       cell.setCell(imageNames[indexPath.row], titleText: imageTitles[indexPath.row], descriptionText: imageDescriptions[indexPath.row])
       cell.index = indexPath
       cell.delegate = self  
       
       return cell
   }  
     
   func selectCellButton(index: NSIndexPath) {  
       let fileName = "sound\(index.row + 1)"  
         
       print(fileName)  
         
       do {  
           let filePath = NSBundle.mainBundle().pathForResource(fileName, ofType: "mp3")  
           let audioPath = NSURL(fileURLWithPath: filePath!)  
           audioPlayer = try AVAudioPlayer(contentsOfURL: audioPath)  
           if audioPlayer.prepareToPlay() {  
               audioPlayer.play()  
           }  
       } catch {  
           print("Error")  
       }  
   }
}
// <CustomTableViewCellのコード>
import UIKit
import AVFoundation
// protocol定義
protocol CustomTableViewCellDelegate: class {
   func selectCellButton(index: NSIndexPath)
}
class CustomTableViewCell: UITableViewCell {
   
   @IBOutlet weak var myImageView: UIImageView!
   @IBOutlet weak var myTitleLabel: UILabel!
   @IBOutlet weak var myDescriptionLabel: UILabel!
   @IBOutlet weak var tapButton: UIButton!
   
   weak var delegate: CustomTableViewCellDelegate!  
   var index: NSIndexPath!
   var audioPlayer = AVAudioPlayer()  
   
   override func awakeFromNib() {
       super.awakeFromNib()
       // Initialization code
   }
   
   override func setSelected(selected: Bool, animated: Bool) {
   override func setSelected(selected: Bool, animated: Bool) {
       super.setSelected(selected, animated: animated)
       
       // Configure the view for the selected state
       // Configure the view for the selected state
   }
   
   func setCell(imageName: String, titleText: String, descriptionText: String) {
       myImageView.image = UIImage(named: imageName)
       myTitleLabel.text = titleText
       myDescriptionLabel.text = descriptionText
   func setCell(imageName: String, titleText: String, descriptionText: String) {
       myImageView.image = UIImage(named: imageName)
       myTitleLabel.text = titleText
       myDescriptionLabel.text = descriptionText
   }
   
   @IBAction func tapButton(sender: AnyObject) {
       
       let fileName = "sound\(index.row + 1)"
       
       print(fileName)
       
       do {
           let filePath = NSBundle.mainBundle().pathForResource(fileName, ofType: "mp3")
           let audioPath = NSURL(fileURLWithPath: filePath!)
           audioPlayer = try AVAudioPlayer(contentsOfURL: audioPath)
           audioPlayer.prepareToPlay()
           audioPlayer.play()
       } catch {
           print("Error")
       }
       delegate?.selectCellButton(index)
   }
}
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る