2017-05-24 5 views
0

どうやって仲間の開発者ですか?UICollectionViewでセクションを動的に実装する方法は?

私はiOS開発に比較的新しく、他の言語で何を実装するのも難しく、比較的簡単です。

私はイベントアプリケーションを構築しています。私のアプリケーションでは、ユーザーは彼がアプリケーションを実行するたびに見たいイベントのカテゴリを選択できます。 [日付]のようなフィルタによっては、特定のカテゴリに結果が表示されないことがあります。彼はカテゴリA、D、F、GおよびMを選んだ。しかし今日では、D、FおよびMのみが基準を満たし、すなわち示すイベントを有する。

したがって、ユーザー設定では、カテゴリの配列(セクション)が与えられます。各カテゴリのイベントの配列(セクション内のアイテム)に少なくとも1つのアイテムがある場合にのみ、各カテゴリを表示する必要があります。 問題は、私のUICollectionViewで、上記のヘッダータイトル、フッターなどでnumberOfSectionsメソッドとnumberOfItemsInSectionメソッドを実装したい。

精神的に私はそれを実現するために必要なロジックを実行することができます少なくとも1つのアイテムを持つカテゴリのみを考慮してカウントします。しかし、私はそれを迅速なコードに翻訳するのに苦労しています。 どうすればよいですか?誰かがそれを実装するコードスニペットを共有できますか?

ありがとうございます。

+0

可能な重複[?私はUICollectionViewでセクションタイトルを追加するにはどうすればよい](HTTPS ://stackoverflow.com/questions/30005348/how-do-i-add-a-section-title-in-uicollectionview) –

答えて

2

カテゴリの配列をフィルタリングし、その結果をcollectionViewのデータソース関数のソースとして使用できます。

サンプルコード:

// replace these structs by your actual models 
struct Event { 
    let id: Int 
} 

struct Category { 
    let events: [Event] 
} 

// this is your Array of categories with 3 elements 
let categories = [Category(events: [Event(id: 0)]), Category(events: [Event(id: 1)]), Category(events: [])] 

// after filtering out the categories without events, the resulting Array has only 2 elements 
let filteredCategories = categories.filter { $0.events.count > 0 } 

その後、あなたはこのようなcollectionViewのためのデータソース機能を実装できます。

func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return filteredCategories.count 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    let category = filteredCategories[section] 
    return category.events.count 
} 
関連する問題