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

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

ただいまの
回答率

90.12%

テーブルビューに2段のラベルを設けるプロジェクト⇒06 cellにimageを加える方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 866

Tomzy

score 98

状況と質問の概略

TableViewにArrayを使ってテキストを記載することはお陰様で成功しています。そのテキスト行頭に2種類のimageを追加してアプリを使うひとにわかりやすくしたいと考えました。いろいろコーディングをしたのですが、ビルドは成功するのですが、エラーがでて先に進みません。よろしく教えてください。

現状の画面スクリーンショット

イメージ説明

現状のコード

//  ViewController.swift
import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{
@IBOutlet var tableView01: UITableView!

override func viewDidLoad() {
super.viewDidLoad()

tableView01.delegate = self
tableView01.dataSource = self     
}  
// セルに表示するテキスト

let texts = ["動画による電話の使い方",
"動画によるカレンダーの使い方",
"動画によるカメラ・ビデオ用法",
"説明文による電話の使い方",
"カレンダーの使い方",
"カメラ・ビデオの使い方",
"応援者の頁"]

//省略

// セルの行数
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return texts.count
}

// セルの内容を変更
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell01")

cell.textLabel?.text = texts[indexPath.row]    
// 文字色変更
cell.textLabel?.textColor = UIColor.blackColor()

// 文字サイズ変更
//cell.textLabel?.font = UIFont.systemFontOfSize(30)
// 文字を太字に変更
cell.textLabel?.font = UIFont.boldSystemFontOfSize(24)

// cellの背景を透過
cell.backgroundColor = UIColor.whiteColor()
// cell内のcontentViewの背景を透過
//cell.contentView.backgroundColor = UIColor.whiteColor()

return cell

//省略`

やりたいこと

上記の7行の冒頭に下記の2つのイメージを載せたい。つまり、動画かテキストかがわかるようにしたい。 イメージ説明 イメージ説明

やったこと

Googleさんで拝見した方法を参考に storyboardを下図のように設定し、(CellにImageViewをドラッグし、タブを1に設定) イメージ説明

下記のコードを書き込みました。

//省略

 //ビデオとテキストを示す画像を追加するための2種類の画像を設定
    let imgArray: NSArray = ["VideoCut.jpg", "VideoCut.jpg", "VideoCut.jpg", "Book.jpg", "Book.jpg", "Book.jpg", "Book.jpg"]

   //省略


// セルの行数
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return texts.count
}

// セルの内容を変更
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell01")

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


// 以下はimageをcellに表示するために https://iphone-app-tec.com/ios/tableview.html から借りたコード
    let img = UIImage(named:"\(imgArray[indexPath.row])")
    // Tag番号 1 で UIImageView インスタンスの生成
    let imageView = tableView01.viewWithTag(1) as! UIImageView
    imageView.image = img

// 以上は https://iphone-app-tec.com/ios/tableview.html から借りたコード

//以下省略

ビルド結果

ビルドは成功、シミュレーター上アイコンも出て画面も進行しますが、途中でiPhone画面が真っ黒になり止まります。
エラーは下記のとおりです。画像も添付します。

エラー内容
fatal error: unexpectedly found nil while unwrapping an Optional value

Thread 1: EXC_BAD_INSTRUCTION (CODE1386_INVOP. subside = 0x0)

イメージ説明

エラー対策でやったこと

@IBOutlet var のつながりはすべて◎でつながっています。
storyboard上controlクリックでいろいろな画面をチェックしましたが、黄色は見つかりません。

2つのエラー文で検索したところ、
"In this case, if you renamed things is probably that somewhere in your code something is referring to previous name of what was changed."
これかなと思ったのですが、確かな原因までは到達できませんでした。

お願い

エラー対策というか、上記の「やりたいこと」ができるように助言をお願いします。

ご参考事項

ネットで見つけたimageを加える方法にはimageとテキスト用2つのラベルをstoryboard上に
設定するケースです。1つのイメージと1つのラベルを設定する方法も試みましたが
テキストに沢山のエラーが発生し収拾がつかなくなりましたので、テキストは従来どおりの
設定にして、イメージのみ追記設定にしましたら上記どおりビルド成功までできました。

その後の参考事項⇨

既存のコードをコメントアウトし、ネットのコードをそっくり導入の上テキストとイメージファイルを
書き換えましたら、下記の画像スクリーンショットのごとき画面になりました。
あとは、体裁を整え遷移を以前の機能がでるように書き換えれば完成かと思います。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

 落ちる原因

セルのReuse Identifiercell01になっていないのではないでしょうか?
スクリーンショットを見る限りではtoTableView02になっている可能性があります。

 ラベルについて

cell.textLabelを使うのではなく、参考にされているサイト(https://iphone-app-tec.com/ios/tableview.html )のように、自分でUILabelを追加し、それに対してテキストを設定するようにして下さい。

 セルの生成について

これも同サイトのように、

let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell01", forIndexPath: indexPath)

としてセルを再利用するようにして下さい。(今回のケースではセルの再利用は必要無さそうですが、TableViewを使う上での基本ということで)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/09/12 12:33

    ありがとうございました。早速やってみます。

    キャンセル

  • 2016/09/12 19:03

    いろいろやりましたが、まだ解決していません。
    そこで、既存のコードをすべてコメントアウトして、与えられたコードをそのままコピーペーストして、画像のところのみ変更しました。ビルド結果は成功しましたが、表示された画面はヘッダーとフッターのテキストのみであとは白紙になりました。まずは、これを成功させてからテキストの体裁や遷移後の処理を組み込みたいと思いますので、この不具合について助言をお願いします。コードと設定および結果の画像は質問の末尾に参考事項として記載しました。

    キャンセル

  • 2016/09/13 00:14

    先の試しの場合、ビルドは成功しても下記のエラーがでてストップしていました。
    そこで、調べましたらDataSourceとDelegateの結び方が悪いことがわかりました。それdを修正しましたら、画像つきのTableViewがでました。これをベースにTableViewの体裁と
    遷移を検討して目指すアプリをつくりたいと思います。また、報告します。
    2016-09-13 00:02:12.638 Lesson03m[3912:5954066] -[UINavigationItem tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fe52145b630
    2016-09-13 00:02:12.642 Lesson03m[3912:5954066] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationItem tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fe52145b630'
    *** First throw call stack:

    キャンセル

  • 2016/09/13 00:41

    fuzzballさん ありがとうございました。 やはり原因はidentifierとコードの意味がわからず単純にコピーペーストをしていたのが原因のようです。現状の画面をお目にかけたいのですが、スペースの関係か載りませんでした。

    キャンセル

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

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