我正在使用 Rails 应用程序 ( http://obscure-lake-7450.herokuapp.com/upcoming.json ) 中的 JSON 填充我的应用程序。我的 Rails 应用程序中的每个帖子都有一个“发布日期”,它们按发布日期分组(基本上每周都有特定的运动鞋发布)。我希望能够在我的应用程序中做同样的事情,但我很难做到这一点。
在我的 Storyboard 上,我有一个带有 UICollectionReusableView 类和一个名为“releasesGroup”的标识符的 Collection Reusable View,我还有一个连接到 UICollectionReusableView 的标签,称为“releasesHeader”。
我还想在标题中显示相应的日期,如下所示:
视图控制器
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *upcomingReleaseURL = [NSURL URLWithString:@"http://obscure-lake-7450.herokuapp.com/upcoming.json"];
NSData *jsonData = [NSData dataWithContentsOfURL:upcomingReleaseURL];
NSError *error = nil;
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
self.upcomingReleases = [NSMutableArray array];
NSArray *upcomingReleasesArray = [dataDictionary objectForKey:@"upcoming_releases"];
for (NSDictionary *upcomingReleaseDictionary in upcomingReleasesArray) {
UpcomingRelease *upcomingRelease = [UpcomingRelease upcomingReleaseWithName:[upcomingReleaseDictionary objectForKey:@"release_name"]];
upcomingRelease.release_date = [upcomingReleaseDictionary objectForKey:@"release_date"];
[self.upcomingReleases addObject:upcomingRelease];
}
[self.collectionView registerClass:[UpcomingReleaseCell class] forCellWithReuseIdentifier:@"UpcomingReleaseCell"];
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return [self.upcomingReleases count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"Cell";
UpcomingReleaseCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
UpcomingRelease *upcomingRelease = [self.upcomingReleases objectAtIndex:indexPath.row];
cell.release_name.text = upcomingRelease.release_name;
return cell;
}
我的 UICollectionReusableView
@interface ReleasesGroup : UICollectionReusableView
@property (weak, nonatomic) IBOutlet UILabel *releasesHeader;
@end
@implementation ReleasesGroup
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
@end
谢谢。
编辑:
我的赛格
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showRelease"])
{
NSIndexPath *selectedIndexPath = [[self.collectionView indexPathsForSelectedItems] objectAtIndex:0];
ReleaseViewController *releaseViewController = [segue destinationViewController];
releaseViewController.singleRelease = self.upcomingReleases[selectedIndexPath.row];
}
}
ReleaseViewController.h
#import <UIKit/UIKit.h>
#import "UpcomingRelease.h"
@interface ReleaseViewController : UIViewController
@property (strong, nonatomic) UpcomingRelease *singleRelease;
@property (weak, nonatomic) IBOutlet UILabel *release_name;
@property (weak, nonatomic) IBOutlet UILabel *release_price;
@property (weak, nonatomic) IBOutlet UILabel *release_colorway;
@property (weak, nonatomic) IBOutlet UILabel *release_date;
@property (weak, nonatomic) IBOutlet UIImageView *thumb;
@end
ReleaseViewController.m
#import "ReleaseViewController.h"
@interface ReleaseViewController ()
@end
@implementation ReleaseViewController
@synthesize singleRelease = _singleRelease;
@synthesize release_name = _release_name;
@synthesize release_price = _release_price;
@synthesize release_colorway = _release_colorway;
@synthesize release_date = _release_date;
@synthesize thumb = _thumb;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *thumbURL = nil;
if ([_singleRelease.images isKindOfClass:[NSArray class]] && [_singleRelease.images count])
thumbURL = [[[[[_singleRelease.images objectAtIndex:0] objectForKey:@"image_file"] objectForKey:@"image_file"] objectForKey:@"medium"] objectForKey:@"url"];
if (thumbURL)
{
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:thumbURL]];
UIImage *image = [UIImage imageWithData:imageData];
self.thumb.image = image;
}
else {
self.thumb.image = [UIImage imageNamed:@"cover.png"];
}
self.release_name.text = self.singleRelease.release_name;
self.release_price.text = [NSString stringWithFormat:@"$%@", _singleRelease.release_price];
self.release_colorway.text = self.singleRelease.release_colorway;
self.release_date.text = [NSString stringWithFormat:@"%@", _singleRelease.formattedDate];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end