回覆列表
  • 1 # 使用者7063786766555

    每個collection view都必須有資料來源為其提供內容。它的責任是為collection views完成以下的事情:

    控制collection view的section數目

    每個section中的item的個數

    為特定的資料項提供cell view

    顯然,簡單的Recipe app,我們在前面的教程中包含了其中一個部分,在這裡我們將繼續講講collection view並且告訴你如何利用不同的section組織items,你將會學到怎樣為collection view新增header檢視和footer檢視。

    如果你沒有看過前面的教程,建議你去看一看前面的教程,或者你可以到這裡下載here。

    Split Recipes into Two Sections in UICollectionView

    在這個簡單的程式中,RecipeCollectionViewController是集合檢視的資料來源物件,為了把檢視分成兩個部分,我們需要有一些變化,接下來我們完成:

    起先,recipeImages陣列是儲存所有recipes的名稱,因為我們想把recipes分成兩組,我們要修改我們的程式碼,並使用簽到陣列來儲存不同的recipe,也許你還不明白啥是嵌入的陣列,下面的圖片會讓你明白的。第一組包含主要的影象,而另一個為drink和dessert。頂級陣列(即recipeImages)包含兩個陣列,每個陣列部分的特定區域包含特定的data items。

    讓我們開始編寫程式碼,在RecipeCollectionViewController.m中初始化"recipeImages"陣列,並在viewDidload方法中寫下面的方法:

    - (void)viewDidLoad

    {

    [super viewDidLoad];

    //Initialize recipe image array

    NSArray *mainDishImages = [NSArray arrryWithObjects:@"egg_benedict.jpg", @"full_breakfast.jpg", @"ham_and_cheese_panini.jpg", @"ham_and_egg_sandwich.jpg", @"hamburger.jpg", @"instant_noodle_with_egg.jpg", @"japanese_noodle_with_pork.jpg", @"mushroom_risotto.jpg", @"noodle_with_bbq_pork.jpg", @"thai_shrimp_cake.jpg", @"vegetable_curry.jpg", nil];

    NSArray *drinkDessertImages = [NSArray arrayWithObjects:@"angry_birds_cake.jpg", @"creme_brelee.jpg", @"green_tea.jpg", @"starbucks_coffee.jpg", @"white_chocolate_donut.jpg", nil];

    recipeImages = [NSArray arrayWithObjects:mainDishImages,drinkDesserImages,nil];

    }

    上面的程式碼將recipes images分成兩組。接下來,修改"numberOfIntemsInSecion:"方法來返回,每個secions中的items數目:

    - (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSecion:(NSInteger)section

    {

    return [[recipeImages objectAtIndex:sectin]count];

    }

    接下來我們按照下面的方法修改"cellForItemAtIndexPath:"方法

    - (UICollectionVIewCell *)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    {

    static NSString *identifier = @"Cell";

    RecipeViewCell *cell = (RecipeViewCell *)[collectionView dequeueReuseIdentifier:identifier forIndexPath:indexPath];

    UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];

    recipeImageView.image = [UIImage imagedNamed:[recipeImages[indexPath.section] objectAtIndex:indexPath.row]];

    cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"photo-frame-2.png"]];

    return cell;

    }

    你可以和以前的程式碼比較以下,你就會知道只有一樣是唯一的變化。我們首先檢索該陣列的section number然後從section中獲取具體的items。

    最後,怎樣給collection view實現兩個section,這個可以透過方法呼叫下面的方法來完成即:在RecipeCollectionViewController.m中的numberOfSectionsInCollectionView方法,在collectin View中返回section中的數量。

    - (NSInteger)numberOfSectionsInCollectionVIew:(UICollectionView *)collectionView

    {

    return [recipeImages count];

    }

  • 中秋節和大豐收的關聯?
  • 十年紅豆杉值錢嗎?為什麼?