Collection ja - Tai-Kimura/SwiftJsonUI GitHub Wiki
class: SJUICollectionView
inherites: UICollectionView
| 属性名 | UIKit | SwiftUI | Compose | XML | jsonでの型 | 詳細 | 備考 |
|---|---|---|---|---|---|---|---|
| showsHorizontalScrollIndicator | - | boolean | scrollview.showsHorizontalScrollIndicator。 デフォルトはfalseです。 |
||||
| showsVerticalScrollIndicator | - | boolean | scrollview.showsVerticalScrollIndicator デフォルトはfalseです。 |
||||
| paging | - | boolean | scrollview.isPagingEnabled。 デフォルトはシステムデフォルトです。 |
||||
| horizontalScroll | - | boolean | この属性は、collectionViewLayoutがUICollectionViewFlowLayoutの場合のみ有効です。 この属性がtrueに設定されると、collectionViewLayoutの方向がUICollectionViewScrollDirection.horizontalに設定されます。 |
||||
| insets | - | string|float array | この属性は、collectionViewLayoutがUICollectionViewFlowLayoutの場合のみ有効です。 float配列または「|」で区切られた文字列がcollectionViewFlowLayout.sectionInsetに設定されます。 配列のサイズが1の場合、すべての位置に同じ値が設定されます。 配列のサイズが2の場合、最初の値が上下に、2番目の値が左右に設定されます。 配列のサイズが3の場合、インデックスと位置は以下の通りです。 0: 上 1: 左と右 2: 下 配列のサイズが4の場合、インデックスと位置は以下の通りです。 0: 上 1: 左 2: 下 3: 右 |
||||
| insetHorizontal | - | float | この属性は、collectionViewLayoutがUICollectionViewFlowLayoutの場合のみ有効です。 この属性はcollectionViewFlowLayout.sectionInsetの左と右の値に設定されます。 |
||||
| insetVertical | - | float | この属性は、collectionViewLayoutがUICollectionViewFlowLayoutの場合のみ有効です。 この属性はcollectionViewFlowLayout.sectionInsetの上と下の値に設定されます。 |
||||
| columnSpacing | - | float | この属性は、collectionViewLayoutがUICollectionViewFlowLayoutの場合のみ有効です。 この属性はcollectionViewFlowLayout.minimumInteritemSpacingに設定されます。 |
||||
| lineSpacing | - | float | この属性は、collectionViewLayoutがUICollectionViewFlowLayoutの場合のみ有効です。 この属性はcollectionViewFlowLayout.minimumLineSpacingに設定されます。 |
||||
| contentInsetAdjustmentBehavior | - | string | scrollView.contentInsetAdjustmentBehavior。 デフォルトはシステムデフォルトです。 リストは以下の通りです automatic: UIScrollView.ContentInsetAdjustmentBehavior.automatic always: UIScrollView.ContentInsetAdjustmentBehavior.always never: UIScrollView.ContentInsetAdjustmentBehavior.never scrollableAxes: UIScrollView.ContentInsetAdjustmentBehavior.scrollableAxes |
||||
| contentInsets | - | string|float array | コレクションビューのコンテンツインセット。 float配列または「|」で区切られた文字列がcontentInsetに設定されます。 insetsと同じフォーマットです。 |
||||
| itemWeight | - | float | フローレイアウトでのアイテムサイジングの重み係数。デフォルトは1.0です。 | ||||
| layout | - | string | コレクションビューのレイアウトタイプ。デフォルトはUICollectionViewFlowLayoutの「Flow」です。 | ||||
| sections | - | JSON array | SwiftUI/Compose用のセクションベース設定(詳細は下記参照)。 | SwiftUI (7.1.2+), Compose | |||
| items | - | string/array | データソースバインディング。SwiftUI/ComposeではCollectionDataSourceにバインドされます。 | ||||
| cellClasses | - | JSON array | 自動登録用のセルクラス定義の配列。 各オブジェクトは「className」と「identifier」プロパティを持つ必要があります。 |
UIKit, Compose (レガシー) | |||
| headerClasses | - | JSON array | 自動登録用のヘッダークラス定義の配列。 各オブジェクトは「className」と「identifier」プロパティを持つ必要があります。 |
UIKit, Compose | |||
| footerClasses | - | JSON array | 自動登録用のフッタークラス定義の配列。 各オブジェクトは「className」と「identifier」プロパティを持つ必要があります。 |
UIKit, Compose |
open class var viewClass: SJUICollectionView.Typeこのプロパティは、createFromJSONメソッドでどのクラスを生成するかを決定するために使用されます。 SJUICollectionViewを継承したクラスを作成する際は、このプロパティでビューのクラスを定義してください。
SJUICollectionViewは、UICollectionViewとSJUIViewからすべてのプロパティを継承しています:
- レイアウト管理とフローレイアウト設定
- データソースとデリゲート機能
- セルの登録と再利用システム
- セクション管理(ヘッダー、フッター)
- スクロール位置とコンテンツ管理
- SJUIViewからのタッチとジェスチャー処理
- レイアウト制約の管理
required public init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout)
required public init?(coder aDecoder: NSCoder)指定されたレイアウトでコレクションビューを適切にセットアップするカスタムイニシャライザー。
public class func createFromJSON(attr: JSON, target: Any, views: inout [String: UIView]) -> SJUICollectionViewこのメソッドは、JSONファイルからコレクションビューが作成される際に呼び出されるファクトリメソッドです。
SJUICollectionViewクラスを継承したクラスを作成する際は、このメソッドをオーバーライドしてください。
open class func getCollectionViewLayout(attr: JSON) -> UICollectionViewLayoutJSON属性に基づいてコレクションビューレイアウトを決定します。
デフォルトの実装では、UICollectionViewFlowLayoutオブジェクトを返します。
カスタムレイアウト実装を提供する場合は、このメソッドをオーバーライドしてください。
open class func getCollectionViewFlowLayout(attr: JSON) -> UICollectionViewFlowLayoutJSON属性に基づいてUICollectionViewFlowLayoutを設定して返します。
getCollectionViewLayoutメソッド内で内部的に呼び出されます。
フローレイアウトの動作とプロパティをカスタマイズする場合は、このメソッドをオーバーライドしてください。
SJUICollectionViewは、セル、ヘッダー、フッターの登録を自動的に処理します:
-
セルクラス:
cellClassesJSON配列からクラスを登録 -
ヘッダークラス:
headerClassesJSON配列からヘッダークラスを登録 -
フッタークラス:
footerClassesJSON配列からフッタークラスを登録 - モジュール解決: 適切なクラス検索のためにバンドル名をモジュールプレフィックスとして使用
- 識別子マッピング: クラス名を再利用識別子に自動的にマッピング
SJUICollectionViewは、UICollectionViewプロトコルとの自動統合を提供します:
- ターゲットがUICollectionViewDelegateに準拠している場合の自動デリゲート割り当て
- ターゲットがUICollectionViewDataSourceに準拠している場合の自動データソース割り当て
- すべての標準コレクションビューコールバックとメソッドのサポート
-
setTargetAsDelegateとsetTargetAsDataSource属性を通じて設定可能
JSON属性を通じた高度なレイアウト設定:
- フローレイアウト: UICollectionViewFlowLayoutカスタマイズの完全サポート
- アイテムサイジング: itemWeightと自動サイジングを通じて設定可能
- スペーシング制御: 列と行のスペーシング設定
- インセット管理: 柔軟なインセット指定(文字列または配列形式)
- スクロール方向: 水平と垂直スクロールの両方をサポート
open class SJUICollectionViewCell: UICollectionViewCell, ViewHolderビューホルダー機能を持つコレクションビューセルのベースクラス。
-
public var _views: Dictionary<String, UIView>- 簡単アクセス用のビュー辞書
open class SJUICollectionReusableView: UICollectionReusableView, ViewHolderビューホルダー機能を持つコレクションビューヘッダーとフッターのベースクラス。
-
public var _views: Dictionary<String, UIView>- 簡単アクセス用のビュー辞書
sections 属性は SwiftUIモードでのみ利用可能 で、セクションベースの設定を提供します:
{
"type": "Collection",
"items": "@{collectionData}",
"sections": [
{
"header": "SectionHeaderView",
"cell": "ProductCell",
"footer": "SectionFooterView",
"columns": 3
},
{
"cell": "CategoryCell",
"columns": 2
}
]
}各セクションオブジェクトには以下を含めることができます:
- header: セクションヘッダーのビュー名(オプション)
- cell: このセクションのセルのビュー名
- footer: セクションフッターのビュー名(オプション)
-
columns: このセクションのカラム数(グローバルの
columns属性を上書き)
SwiftUIモードでは、items 属性は単純な配列ではなく CollectionDataSource オブジェクトにバインドされます:
// ViewModelで
@Published var collectionData = CollectionDataSource()
// データでセクションを設定
let section1 = CollectionDataSection()
section1.cells = ("ProductCell", productDataArray)
section1.numberOfColumns = 3
let section2 = CollectionDataSection()
section2.header = ("SectionHeader", [["title": "カテゴリー"]])
section2.cells = ("CategoryCell", categoryDataArray)
section2.numberOfColumns = 2
collectionData.sections = [section1, section2]CollectionDataSection の構造:
class CollectionDataSection {
var header: (viewName: String, data: [[String: Any]])?
var cells: (viewName: String, data: [[String: Any]])?
var footer: (viewName: String, data: [[String: Any]])?
var numberOfColumns: Int = 2
}このアーキテクチャにより以下が可能になります:
- セクションごとに異なるセルタイプ
- セクションごとに可変のカラム数
- セクション固有のヘッダーとフッター
- 適切なSwiftUI更新による動的データバインディング
UIKitのみの属性:
-
cellClasses: セル登録配列(UIKitはクラスベースの登録を使用) -
headerClasses: ヘッダー登録配列 -
footerClasses: フッター登録配列 -
itemSize: 固定サイズ設定 -
estimatedItemSize: セルフサイジング設定
SwiftUIのみの属性:
-
sections: セクションベースのレイアウト設定 -
itemsはCollectionDataSourceにバインド(単純な配列ではない)
SJUICollectionViewは、UICollectionViewとSJUIViewからすべてのメソッドを継承しています:
- セル管理(
dequeueReusableCell、cellForItemなど) - セクション管理(
numberOfSections、numberOfItemsInSectionなど) - レイアウト管理(
performBatchUpdates、reloadDataなど) - 選択処理(
selectItem、deselectItemなど) - スクロール管理(
scrollToItem、setContentOffsetなど) - SJUIViewからのタッチとジェスチャー処理
- レイアウト制約の管理