質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.96%

エラーが出ず実行すると画面が真っ白になる

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,370

surf

score 15

プロジェクトにsound01〜sound04までの4曲を追加し、セルにButtonを設置してそれを押すと音が鳴るように以下のコードを書いたのですが、画面が真っ白になってしまいます。また、停止ボタンを追加するとエラーが出てしまい、画面が白くなるのと関係があるのかと思い、今はその部分のコードを書いてませんが、それも解決できれば解決したいです。

//<ViewControllerのコード>
import UIKit
import AVFoundation

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

// 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!

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)
}
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/09/10 07:14

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

checkベストアンサー

0

起動すると、すぐに何も表示されず画面が真っ白になるのでしたら、
StoryboardのViewControllerの設定の、
「Is Initial View Controller」にチェックを入れて実行。

アプリ実行時に画面が真っ黒 → is Initial View Controller にチェックが入っていないのでは

StoryboardにNavigationControllerを追加して起動時の表示画面(Initial View Controller)にする

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/10 09:32

    Uecky_Equalさん
    回答ありがとうございます。
    ただ、「Is Initial View Controller」にはチェックが入っているんです^^;

    キャンセル

  • 2016/09/10 10:03

    @IBAction func tapButton(sender: AnyObject)
    の「AnyObject」を、接続時に「UIButton」にする必要があります。

    キャンセル

  • 2016/09/10 10:11

    とりあえず、ボタンをタップしたら、そのセルの位置をprintするようにしたコードです。

    import UIKit
    import AVFoundation

    class TestViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    let imageNames = ["futako.jpg", "yokado.jpg", "fran.jpg", "zikken.jpg"]

    @IBOutlet weak var tableView: UITableView!

    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")
    }
    }



    @IBAction func tapButton(sender: UIButton) {

    var hoge = sender.superview

    while(hoge!.isKindOfClass(UITableViewCell) == false) {
    hoge = hoge!.superview
    }

    let cell = hoge as! UITableViewCell
    // touchIndexは選択したセルが何番目かを記録しておくプロパティ
    let indexPath = self.tableView.indexPathForCell(cell)

    print(indexPath)



    // delegate?.selectCellButton(index)
    }


    }



    //<CustomTableViewCellのコード>
    import UIKit


    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!

    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
    }

    }

    キャンセル

  • 2016/09/10 13:15

    Uecky_Equalさん
    回答ありがとうございます。
    画面が真っ白なのはなおりません。ですが、Uecky_Equalさんの方では実行できているということであれば、私の方の問題で、何か根本的な間違いをしていると考えられます。
    コードに問題はないでしょうから、それ以外の箇所を色々といじってみます。
    改めて、ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.96%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる