Collection ja - Tai-Kimura/SwiftJsonUI GitHub Wiki

🇺🇸 English | 🇯🇵 日本語

Collection

class: SJUICollectionView
inherites: UICollectionView

Collectionの属性

属性名 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

Collectionのプロパティ

静的プロパティ

open class var viewClass: SJUICollectionView.Type

このプロパティは、createFromJSONメソッドでどのクラスを生成するかを決定するために使用されます。 SJUICollectionViewを継承したクラスを作成する際は、このプロパティでビューのクラスを定義してください。

継承されたプロパティ

SJUICollectionViewは、UICollectionViewとSJUIViewからすべてのプロパティを継承しています:

  • レイアウト管理とフローレイアウト設定
  • データソースとデリゲート機能
  • セルの登録と再利用システム
  • セクション管理(ヘッダー、フッター)
  • スクロール位置とコンテンツ管理
  • SJUIViewからのタッチとジェスチャー処理
  • レイアウト制約の管理

Collectionの関数

イニシャライザー

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) -> UICollectionViewLayout

JSON属性に基づいてコレクションビューレイアウトを決定します。
デフォルトの実装では、UICollectionViewFlowLayoutオブジェクトを返します。
カスタムレイアウト実装を提供する場合は、このメソッドをオーバーライドしてください。

open class func getCollectionViewFlowLayout(attr: JSON) -> UICollectionViewFlowLayout

JSON属性に基づいてUICollectionViewFlowLayoutを設定して返します。
getCollectionViewLayoutメソッド内で内部的に呼び出されます。
フローレイアウトの動作とプロパティをカスタマイズする場合は、このメソッドをオーバーライドしてください。

自動セル登録

SJUICollectionViewは、セル、ヘッダー、フッターの登録を自動的に処理します:

  • セルクラス: cellClasses JSON配列からクラスを登録
  • ヘッダークラス: headerClasses JSON配列からヘッダークラスを登録
  • フッタークラス: footerClasses JSON配列からフッタークラスを登録
  • モジュール解決: 適切なクラス検索のためにバンドル名をモジュールプレフィックスとして使用
  • 識別子マッピング: クラス名を再利用識別子に自動的にマッピング

データソースとデリゲートの統合

SJUICollectionViewは、UICollectionViewプロトコルとの自動統合を提供します:

  • ターゲットがUICollectionViewDelegateに準拠している場合の自動デリゲート割り当て
  • ターゲットがUICollectionViewDataSourceに準拠している場合の自動データソース割り当て
  • すべての標準コレクションビューコールバックとメソッドのサポート
  • setTargetAsDelegatesetTargetAsDataSource属性を通じて設定可能

レイアウト設定

JSON属性を通じた高度なレイアウト設定:

  • フローレイアウト: UICollectionViewFlowLayoutカスタマイズの完全サポート
  • アイテムサイジング: itemWeightと自動サイジングを通じて設定可能
  • スペーシング制御: 列と行のスペーシング設定
  • インセット管理: 柔軟なインセット指定(文字列または配列形式)
  • スクロール方向: 水平と垂直スクロールの両方をサポート

関連クラス

SJUICollectionViewCell

open class SJUICollectionViewCell: UICollectionViewCell, ViewHolder

ビューホルダー機能を持つコレクションビューセルのベースクラス。

  • public var _views: Dictionary<String, UIView> - 簡単アクセス用のビュー辞書

SJUICollectionReusableView

open class SJUICollectionReusableView: UICollectionReusableView, ViewHolder

ビューホルダー機能を持つコレクションビューヘッダーとフッターのベースクラス。

  • public var _views: Dictionary<String, UIView> - 簡単アクセス用のビュー辞書

SwiftUI専用機能 (7.1.2+)

sections 属性

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でのCollectionDataSource

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 と SwiftUI の違い

UIKitのみの属性:

  • cellClasses: セル登録配列(UIKitはクラスベースの登録を使用)
  • headerClasses: ヘッダー登録配列
  • footerClasses: フッター登録配列
  • itemSize: 固定サイズ設定
  • estimatedItemSize: セルフサイジング設定

SwiftUIのみの属性:

  • sections: セクションベースのレイアウト設定
  • itemsCollectionDataSource にバインド(単純な配列ではない)

継承されたメソッド

SJUICollectionViewは、UICollectionViewとSJUIViewからすべてのメソッドを継承しています:

  • セル管理(dequeueReusableCellcellForItemなど)
  • セクション管理(numberOfSectionsnumberOfItemsInSectionなど)
  • レイアウト管理(performBatchUpdatesreloadDataなど)
  • 選択処理(selectItemdeselectItemなど)
  • スクロール管理(scrollToItemsetContentOffsetなど)
  • SJUIViewからのタッチとジェスチャー処理
  • レイアウト制約の管理
⚠️ **GitHub.com Fallback** ⚠️