質問編集履歴

2 コードとタイトル

surf

surf score 15

2016/09/08 19:55  投稿

ボタンひとつで音楽を再生・停止したい
table cellでは一つのボタンで再生と停止というのはできないのでしょうか?
セルごとに異なる曲を再生したく、プロジェクトに4曲(sound01〜sound04)を保存して、以下のコードを書きました。
そして『Play』ボタンを押すと再生するようにしたのですが、できれば『Pause』ボタンを別に作るのではなく、Playを押すとボタンがPauseに変わり、Pauseを押すとボタンがPlayに変わるようにしたいのですがそういうことはできますか?
また、どこにどのようなコードを記載したらいいか、教えて欲しいです。
そして『Play』ボタンを押すと再生して『Pause』と表示され、『Pause』を押すとボタンが『Play』に変わるようにしたいのですが、以下のエラーが出ます。
エラー内容①:  
The btnPlayPause outlet from the SecondViewController to the UIButton is invalid. Outlets cannot be connected to repeating content.  
 
エラー内容②:  
Use of unresolved identifier 'audioPath'  
```ここに言語を入力
//ViewControllerのコード
import UIKit
import AVFoundation
class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, CustomTableViewCellDelegate {
   
   
     
   var player = AVAudioPlayer()
   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.
     
     
       player = AVAudioPlayer(contentsOfURL: audioPath, error: nil)  
       player.prepareToPlay()  
     
     
   }
   
   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
   }
   
     
   @IBOutlet weak var btnPlayPause: UIButton!  
     
   @IBAction func btnPlayPause(sender: UIButton) {  
         
       if (player.playing) {  
           player.pause()  
           btnPlayPause.setTitle("Play", forState: UIControlState.Normal)  
       } else {  
           player.play()  
           btnPlayPause.setTitle("Pause", forState: UIControlState.Normal)  
       }  
   }  
   func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return imageNames.count
   }
   
   func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
       
       let cell = tableView.dequeueReusableCellWithIdentifier("MyCell1") as! CustomTableViewCell1
       
       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
**__###ボールドテキスト__**
protocol CustomTableViewCellDelegate: class {
   func selectCellButton(index: NSIndexPath)
}
class CustomTableViewCell1: UITableViewCell {
   @IBOutlet weak var myImageView: UIImageView!
   @IBOutlet weak var myTitleLabel: UILabel!
   @IBOutlet weak var myDescriptionLabel: UILabel!
   
   @IBOutlet weak var tapButton: UIButton!
   @IBOutlet weak var btnPlayPause: UIButton!
   
   
   weak var delegate: CustomTableViewCellDelegate!
   var index: NSIndexPath!
   
   override func awakeFromNib() {
       super.awakeFromNib()
       // Initialization code
   }
   
   override func setSelected(selected: Bool, animated: Bool) {
       super.setSelected(selected, animated: animated)
       
       // 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
   }
   
   @IBAction func tapButton(sender: AnyObject) {
       delegate?.selectCellButton(index)
   }
   }
}
```
  • Swift 2

    1349 questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

1 タイトル

surf

surf score 15

2016/09/07 21:23  投稿

Playを押すと曲が再生し、かつタイトルがPauseに変わるようにしたい
ボタンひとつで音楽を再生・停止したい
セルごとに異なる曲を再生したく、プロジェクトに4曲(sound01〜sound04)を保存して、以下のコードを書きました。
そして『Play』ボタンを押すと再生するようにしたのですが、できれば『Pause』ボタンを別に作るのではなく、Playを押すとボタンがPauseに変わり、Pauseを押すとボタンがPlayに変わるようにしたいのですがそういうことはできますか?
また、どこにどのようなコードを記載したらいいか、教えて欲しいです。
```ここに言語を入力
//ViewControllerのコード
import UIKit
import AVFoundation
class SecondViewController: 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("MyCell1") as! CustomTableViewCell1
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
**__###ボールドテキスト__**
protocol CustomTableViewCellDelegate: class {
func selectCellButton(index: NSIndexPath)
}
class CustomTableViewCell1: 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!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// 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
}
@IBAction func tapButton(sender: AnyObject) {
delegate?.selectCellButton(index)
}
}
```
  • Swift 2

    1349 questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

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