回答:
それは要件によって異なります。アプリケーションのフローによって、アプリケーションに統合するUIのタイプが決まります。
人々は主UICollectionview
に、グリッドに表示された複数の画像でUIのタイプを作成するために使用します。これはを使用した複雑なロジックになりますUITableView
が、を使用UICollectionview
すると簡単です。
を使用する場合UICollectionview
、選択された項目の値を取得することにより、タグなどのボタンを設定する必要はありません。あなたは、単に取得することができます-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
し、中UITableViewDelegate
:
`-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`
アイテムではなく選択された行を取得するため、グリッドまたは変更されたアイテムを作成するにUICollectionview
は、を使用するのが最適です。
各アイテムのリストの詳細については、各アイテムの詳細情報が表示されるUITableView
ため、人々が使用しています。
Appleドキュメント:
UICollectionViewクラスは、データ項目の順序付けられたコレクションを管理し、カスタマイズ可能なレイアウトを使用してそれらを提示します。コレクションビューは、テーブルビューと同じ一般的な機能を提供しますが、コレクションビューは、単一列のレイアウト以外のものもサポートできます。コレクションビューは、複数列グリッド、タイルレイアウト、円形レイアウトなどの実装に使用できるカスタマイズ可能なレイアウトをサポートしています。必要に応じて、コレクションビューのレイアウトを動的に変更することもできます。
テーブルビューでは、項目のリストが1つの列に表示されます。UITableViewは垂直スクロールのみを許可しますが、UITableViewはUIScrollViewのサブクラスであり、ユーザーはテーブルをスクロールできます。テーブルの個々の項目を構成するセルは、UITableViewCellオブジェクトです。UITableViewはこれらのオブジェクトを使用して、テーブルの表示可能な行を描画します。セルにはコンテンツ(タイトルと画像)があり、右端近くにアクセサリビューを表示できます。標準アクセサリビューは、開示インジケータまたは詳細開示ボタンです。前者はデータ階層の次のレベルにつながり、後者は選択されたアイテムの詳細ビューにつながります。アクセサリビューは、スイッチやスライダーなどのフレームワークコントロールにすることも、カスタムビューにすることもできます。テーブルビューは、ユーザーがテーブルの行を挿入、削除、および並べ替えることができる編集モードに入ることができます。
これが私の基準です:
UITableViewで実行できる場合は、それを使用します
UITableViewがそれを実行するために多くのコードを必要とする場合、またはまったく実行できない場合は、UICollectionViewを使用します。
決定する前に、UITableViewの制限を考慮する必要があります。これは単一の列です。また、カスタマイズできるのはセルのみで、セクションの背景などはカスタマイズできません。したがって、余分な飾りのないもののまっすぐなリストがある場合は、基本的には沼地の標準iOSビューのように見えますが、UITableviewを使用します。カスタムインセット、または各セクションの周囲の境界線がある場合は、UICollectionViewを使用します。
ビューをテーブルビューとして開発し始めると非常にコストがかかるため、UICollectionViewをすべてのことについて実際に検討していますが、後で必要なことを実行できないことがわかります。直接体験;)
2つについてさらに経験を積んだ後で編集します。最後の段落は無視してください。UICollectionViewをUITableViewのように機能させるには、多くのボイラープレートコードが必要です。UICollectionViewは、本当に必要な場合にのみ使用してください。;)
単純なリストと前方/後方ナビゲーションには、を使用しますUITableView
。
高度なカスタマイズが必要な場合は、を使用してくださいUICollectionView
。
一般的に言って、ソフトウェア開発では、「最も簡単なこと」を表すアプローチを選択するのが最善です。
編集:iOS 14以降、UICollectionView
リストも実行できるようになり、現在は推奨されるアプローチです。詳細と実装の詳細については、WWDC20からのこのセッションを参照してください:https ://developer.apple.com/videos/play/wwdc2020/10026/
私の見解によれば、collectionViewとtableViewの主な違いは
TABLEVIEW-> 1列のみのアイテムのリストを表示します。
COLLECTION-VIEW->複数列のアイテムのリストを表示します。
それがあなたを助けることを願っています。
UITableView for iPhoneを選択する場合は、最初にiPad戦略を検討してください。iPad固有のレイアウトが必要な場合は、その単一列のレイアウトをグリッドにすることができます。
必須ではありませんが、常にコレクションビューを使用します。そうすることで、さまざまな解像度でのコレクションの表示方法を簡単に調整できます。プラスは、将来リファクタリングするときに新しいタイプのセルをすばやく追加する準備ができていることです。
テーブルビューの意味がわかりません。コレクションビューを使用してテーブルを表すのは非常に簡単です。IMO。
私の個人的な経験から、2つの要素は大まかに比較する必要があります。
TableView
TableViewは、データをリスト形式で表示するために設計されたUI要素です。UITableViewには標準で次のような特定の機能があります。
上記の要素により、リスト形式で表示および操作するときのデータの使いやすさが向上します。メールの閲覧など。
CollectionView
CollectionViewは、カスタムレイアウト(通常、リストではないもの)を使用してコンテンツを表示するために設計されたUI要素です。CollectionViewsは、完全にカスタマイズされたレイアウトスタイルでデータを表示する機能を改善し、動的にレイアウトを動的に変更します。次に例を示します。
CollectionViewsでは、複数の選択も可能です。
結論
上記からわかるように、どちらも完全に異なるユースケースを持ち、独自の特定のデータセットの開発と使いやすさを強化するために設計されています。
次の相互作用でリストスタイルで何かを表示している場合:-追加-削除-並べ替え次に、UITableViewは、ボックスから直接サポートを提供することにより、このプロセスを簡素化します。
それ以外の場合は、より柔軟にCollectionViewの利点を活用する必要があります。
どちらも要件によって異なります。テーブルビューは、さまざまな編集シナリオもサポートしています。このサポートは、コレクションビュークラスには実装されていません。これらのメソッドに依存するテーブルビューから変換する場合は、コレクションビューで少し余分な作業を行うことを期待してください。コレクションビューのセクションヘッダーは、ビュー内の任意の場所に配置できます。UITableViewは、選択された項目の値を取得することにより、タグなどのボタンを設定する必要はありません。
実際には、UITableViewだけが必要なときに、誰もが私が遭遇したUICollectionViewを使用します。「1次元です。上下します。なぜレイアウトとデータに不要なデリゲートメソッドを追加するのですか?」私はかつて、アニメーションマニュアルもHIGもUICollectionViewガイドも読んでいない所有者がそれを使用して可変の高さとアニメーションを追加することを決めたため、スタートアップがUICollectionViewCellが壊れた理由を見つけるのに役立つ追加の2時間を費やしました。言うまでもなく、余分なレイアウトデリゲート+ニブがないため、テーブルセルを使用するだけで回避できたビジネスクリティカルではない問題について、頭痛と多くの時間を費やしました。
これを正直に言えば、私はあなたのデータとディスプレイがそれを必要とするときにUICollectionViewのためにすべてです。彼らは非常に強力です。しかし実際には、私が見たほとんどの人がリストでそれらを使用しています。
これは別の欠陥を引き起こします。これらは、常に変更されない短い定数リストにも使用されます。この場合、Xibを作成します。または、それらを積み重ねるカスタムビューを記述します。どうして?ボタンやスイッチで5セットのラベルのメモリ管理が必要ないため。変更される可能性がある場合は、はい、リストを使用してください。物理学が必要な場合、UICollectionViewはいくつかのクールな効果でうまく機能します。しかし、5つのデリゲートメソッドと移動しない5つのラベルのレイアウトシステムを本当に追加する必要があるのでしょうか。
また、iOSにもネイティブのスタッキングビューが追加されたことを忘れないでください。2Dシステムやアニメーションシステムに精通している場合でも、思い通りに変形させることはできないので、組み込みのものを使用することはありません。
私が言っているのは、要件を定義することだけです。UIがアイテムを追加/削除したり、それ自体を更新したりしない場合は、これらのいずれも必要ないかもしれません。または、カードゲームを作成し、それらを仮想的にテーブルに置き、物理システムでUICollectionViewを使用して、レイアウトガイドを作成することもできます。
現在のプロジェクトでこの問題が発生しました。どちらを使用するか。私の場合、それは本当に簡単でした。両方必要でした。私のビューはUITableViewのように見えるようにし、その変更/レイアウトを変更する必要もありました。したがって、UICollectionViewが使用されました。また、追加のカスタマイズが不要なすべての場所でUITableViewを使用しています。UiTableViewには画像とテキストを含むデフォルトのレイアウトが付属しているので、簡単にするために使用します。
要件に基づいて、UITableViewまたはUICollectionビューを選択します。
画像やアイテムをグリッドタイプで表示したい場合、またはさらにカスタマイズが必要な場合は、UICollectionviewを使用します。
各項目を詳細および副詳細とともにリストするために、UITableViewを使用します。
UICollectionView: UICollectionViewクラスは、データ項目の順序付けられたコレクションを管理し、カスタマイズ可能なレイアウトを使用してそれらを提示します。コレクションビューは、単一ビューのレイアウトだけでなく、それ以外のものもサポートできることを除いて、テーブルビューと同じ一般的な機能を提供します。
UITableView:テーブルビューでは、項目のリストが1つの列に表示されます。UITableViewは垂直スクロールのみを許可しますが、UITableViewはUIScrollViewのサブクラスであり、ユーザーはテーブルをスクロールできます。