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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1967閲覧

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

Tomzy

総合スコア104

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/09/10 06:47

編集2016/09/12 15:37

###状況と質問の概略
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つのラベルを設定する方法も試みましたが
テキストに沢山のエラーが発生し収拾がつかなくなりましたので、テキストは従来どおりの
設定にして、イメージのみ追記設定にしましたら上記どおりビルド成功までできました。

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

イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

落ちる原因

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

ラベルについて

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

セルの生成について

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

swift

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

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

投稿2016/09/12 01:19

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tomzy

2016/09/12 03:33

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

2016/09/12 10:03

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

2016/09/12 15: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:
Tomzy

2016/09/12 15:41

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問