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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

1回答

1786閲覧

detailTextLabelが表示されない【TableViewCell】

kazuki_user

総合スコア147

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2020/09/09 12:03

編集2020/09/10 00:36

GitHubApiを使用しています。
detailTextLabel?.textで言語 (languageキー) を表示したいです。

RightDetailにしても、detailTextLabel?が表示されないです。
エラーはなく、ビルドは出来ます。

イメージ説明

## コード

swift

1// 用意したviewをcellのテンプレートとして登録するメソッドであり、cellの再利用に必要。 2 tableView.register(RepositoryCell.self, forCellReuseIdentifier: Identifiers.RepositoryCell) 3 4// TableView 5 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 6 7 // dequeueReusableCellで、セルを再利用。 8 // nilを返さない為、オプショナルバインディングは不要。 9 10 let cell: RepositoryCell = tableView.dequeueReusableCell(withIdentifier: Identifiers.RepositoryCell, for: indexPath) as! RepositoryCell 11 cell.configureCell(repo[indexPath.row]) 12 cell.tag = indexPath.row 13 return cell 14 }

識別子ApiKey.Languageは、他の箇所では機能したので正常です。

configureCell

1 func configureCell(_ repo: Dictionary<String, Any>) { 2 3 self.textLabel?.text = repo[ApiKey.FullName] as? String ?? "" 4 self.detailTextLabel?.text = repo[ApiKey.Language] as? String ?? "" 5 // DetailのLanguageが表示されない.. 6 // ApiKey.Languageではなく、TableViewのDetailに問題あり。 7 }

## エラーに関して、追記

SearchRootVC

1 func setupTableView() { 2 searchBar.delegate = self 3// 以下のregisterを削除すると... 4 tableView.register(RepositoryCell.self, forCellReuseIdentifier: Identifiers.RepositoryCell) 5 }

SearchRootVC

1// Extension 2 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 3 4// let cell: ~~~の行で、 Thread 1: signal SIGABRT が表示されます。 5 let cell: RepositoryCell = tableView.dequeueReusableCell(withIdentifier: Identifiers.RepositoryCell, for: indexPath) as! RepositoryCell // Thread 1: signal SIGABRT 6 let UserRepo = repo[indexPath.row] 7 cell.configureCell(UserRepo) 8 cell.tag = indexPath.row 9 return cell 10 }

debugArea

1Could not cast value of type 'UITableViewCell' (0x10edf4990) to 'CodeCheck_Test_Yumemi.RepositoryCell' (0x109593f60). 22020-09-10 09:30:07.757485+0900 CodeCheck-Test-Yumemi[38810:2869670] Could not cast value of type 'UITableViewCell' (0x10edf4990) to 'CodeCheck_Test_Yumemi.RepositoryCell' (0x109593f60). 3(lldb)

debugArea

1tableView UITableView 0x00007fba3e850e00 2indexPath IndexPath 3self CodeCheck_Test_Yumemi.SearchRootVC 0x00007fba3fb08b10 4cell CodeCheck_Test_Yumemi.RepositoryCell 5UserRepo [String : Any]

質問は以上です。
お時間あるときに、ご返信頂けましたら幸いです????

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

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

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

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

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

guest

回答1

0

ベストアンサー

StoryBoard で下記の設定を行なっていて、

イメージ説明

かつ、コード上で

Swift

1    // 用意したviewをcellのテンプレートとして登録するメソッドであり、cellの再利用に必要。 2 tableView.register(RepositoryCell.self, forCellReuseIdentifier: Identifiers.RepositoryCell)

この設定を行なった場合、有効になるのは後者の方で、StoryBoard で設定した Cell Style は有効になりません。

なので、後者のコードは削除し、StoryBoard で Reuse Identifier や Cell Style を設定にすると(おそらく)Right Detail に相当する部分は表示されるかと思います。

以下も参考にしてみてください。

投稿2020/09/09 23:54

TsukubaDepot

総合スコア5086

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

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

kazuki_user

2020/09/09 23:57 編集

ご返信ありがとうございます! あるサイトで、Registerメソッドについて 『用意したviewをcellのテンプレートとして登録するメソッドであり、cellの再利用に必要。』 と記載されていたのですが、 dequeueReusableCellはレジスター無しでも使用可能なのですか??
TsukubaDepot

2020/09/09 23:58

あるサイトとは、具体的にどのサイトでしょうか。
TsukubaDepot

2020/09/10 00:11 編集

Storyboard を使う場合でも、一部、あるいは全てコードベースで行う場合でも、Cell を登録する必要はあります。 上記のページで説明してあるのは、コードで Cell を登録する方法です。 kazuki_userさんがやろうとしている方法は、StoryBoard でも登録し、またコードでも登録しようとしている方法です。どちらかに統一したほうがいいかと思います。 Right Detail を表示させようとするのであれば、StoryBoard で設定する方法が一番簡単(というか、それ以外の方法はおそらくないと思う)ので、Cellの登録まで StoryBoard で行うしかないかと思います。
kazuki_user

2020/09/10 00:27 編集

なるほど、そうなのですね。???? registerを削除して実行したところ、 Thread 1: signal SIGABRT エラーが出てしまうのですが、register以外の何かが原因でしょうか? Could not cast value of type 'UITableViewCell' to 'CodeCheck_Test_Yumemi.RepositoryCell' . CodeCheck-Test-Yumemi[38709:2862655] Could not cast value of type 'UITableViewCell' to 'CodeCheck_Test_Yumemi.RepositoryCell' . UITableViewCellのキャストが出来ない?のでしょうか
TsukubaDepot

2020/09/10 00:28

> Thread 1: signal SIGABRT エラーが出てしまうのですが、register以外の何かが原因でしょうか? エラーメッセージだけでは判別できませんので、どの行ででているのか、デバッグエリアには何か表示されていないのかといった情報もいただけないでしょうか。
kazuki_user

2020/09/10 00:32

了解です。 質問欄に追記いたしました。
kazuki_user

2020/09/10 00:57 編集

RepositoryCellを参照した事で、無事detailTextLabelが表示されました!! 今後エラーが起こった際には「Custom Classの参照」に留意します????‍♂️????‍♂️ また、以前質問させて頂いたこちらと関連するのですが、 https://teratail.com/questions/290663 Modelにて設定した定数、 let repo = selectedUser.repo[selectedUser.RepoToPass] が原因で、 Unexpectedly found nil while implicitly unwrapping an Optional value が出ます。 このテキスト格納方法は、あまり適切ではないのでしょうか????? (リンク先、追記2を参照)
TsukubaDepot

2020/09/10 01:05 編集

> Modelにて設定した定数、 > let repo = selectedUser.repo[selectedUser.RepoToPass] が原因で、 > Unexpectedly found nil while implicitly unwrapping an Optional value が出ます。 ここだけ抜き出されても回答するのは困難ですし、もはや今回の質問とは無関係です。 個別に質問を立てられるのがいいかと思いますが、「まずは最低限のコードとして確かめてみて」からご質問することをお勧めします。 現在の状態だと、ありとあらゆるところに問題があることが多く、何が本質的な問題なのは把握するのが困難です。
kazuki_user

2020/09/10 01:07

了解しました????‍♂️ 丁寧なご対応ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問