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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

426閲覧

XcodeでのTableViewの使い方

TsutomuTanaka

総合スコア13

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/07/12 18:31

tableViewを用いたアプリを作っており、apple developerの公式ドキュメントの他に、
下記のサイトを参考にしております。

「SwiftでTableViewを使ってみよう」
https://qiita.com/pe-ta/items/cafa8e20029047993025

この中の「TableViewのOutletsを設定」のところで
ViewControllerと、OutletsのdataSourceとdelegateを繋いでおります。
①これをしなければ、コードがtableViewに反映されないということは分かるのですが、
どのような意味があるのでしょうか。
②コードで表すとしたらどのように表せばいいでしょうか。

また、「TableViewCellのIdentifierを設定」のところで、こちらもまたコードとtableViewCellを繋ぐ行為だということは分かるのですが、③register(_:forCellReuseIdentifier:)を使用する場合、どのようなコードを書けばよろしいでしょうか。
第一引数でクラスを求められるので、1からセルに対応するクラスを作ることになるのでしょうか。

後学のためにもコードで表す方法を知っておきたいですし、
アプリ制作で、あとから振り返りやすくするため、
なるべくXcodeのUtility areaは使わず、コードでまとめたいと考えております。

何卒、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

①これをしなければ、コードがtableViewに反映されないということは分かるのですが、

どのような意味があるのでしょうか。

delegate, dataSource を設定しなければ、tableView の枠を表示したあとの表示するべきセルの個数の計算、個別のセルの表示やセルを選択したときの動作などを設定することができませんし、仮にコードで設定してもそれを反映させることもできません。

ちなみに、teratail で「UITableView, UICollectionView (のセルの中身)が表示されない」という質問の多くは、これら delegate や dataSource の設定漏れです。

②コードで表すとしたらどのように表せばいいでしょうか。

過去のご質問

  • [TableViewのcellForRowAtでエラーが出ます。

](https://teratail.com/questions/242391)

を拝見しました。
そこで提示されているコードで設定している通りとなります。

具体的に指摘すれば、tableView へのアウトレットを

Swift

1 @IBOutlet var tableView: UITableView!

と設定したのであれば、viewDidLoad()などで

Swift

1 tableView.delegate = self 2 tableView.dataSource = self

と記述する方法が多いかと思います。
ただし、selfの部分は delegate や dataSource をどのクラスで設定するのかによって、違うインスタンスを設定する場合もあります。

また、「TableViewCellのIdentifierを設定」のところで、こちらもまたコードとtableViewCellを繋ぐ行為だということは分かるのですが、③register(_:forCellReuseIdentifier:)を使用する場合、どのようなコードを書けばよろしいでしょうか。

第一引数でクラスを求められるので、1からセルに対応するクラスを作ることになるのでしょうか。

これも過去のご質問

  • [TableViewのcellForRowAtでエラーが出ます。

](https://teratail.com/questions/242391)

で提示されているコードの中でご自身が設定されています。
そこでは

Swift

1 2 tableView.register(UINib(nibName: "ShopCell1", bundle: nil), forCellReuseIdentifier: "ShopCell1")

という具合に設定されていますので、このような記述となります。

ちなみに、上記の場合は xib でカスタムセルを設定する方法となります。
もし、Table View Cell を使ってカスタムセルを記述するのであれば、上記の設定は不要で、StoryBoardでカスタムセルと Reuse Identifier を設定すれば

Swift

1 let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)

のような感じでセル生成時に(具体的にはtableView(_:cellForRowAt:)で)設定することとなります。

投稿2020/07/12 21:21

編集2020/07/12 21:22
TsukubaDepot

総合スコア5086

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問