0

我有一个表视图控制器,我想将其更改为集合视图控制器,我的应用程序使用 JSON 获取其信息。

我已经在我的 Storyboard 中创建了一个 Collection View Controller。我的视图控制器名为“UpcomingReleasesViewController”,我有一个名为“UpcomingReleaseCell”的 UICollectionViewCell。在我的故事板中,我有一个链接到名为“release_name”的集合单元的标签。

我想转移我在 TVC 中的代码,但我在更新它时遇到了一些问题。

我添加到我的 UpcomingReleasesViewController.h 的代码(就像我在我的 TVC 中一样)

@interface UpcomingReleasesViewController : UICollectionViewController

@property (strong, nonatomic) NSMutableArray *upcomingReleases;

@end

我将此代码添加到我的 UpcomingReleasesViewController.m (当我调用cell.textLabel.text时出现错误)

- (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"]];
        [self.upcomingReleases addObject:upcomingRelease];
    }
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identifier = @"Cell";

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    UpcomingRelease *upcomingRelease = [self.upcomingReleases objectAtIndex:indexPath.row];

    cell.textLabel.text = upcomingRelease.release_name;

    return cell;
}

同样在我使用 TVC 时,我有一个名为“UpcomingRelease”的 NSObject,代码如下:

即将发布.h

@interface UpcomingRelease : NSObject

@property (nonatomic, strong) NSString *release_name;

// Designated Initializer
- (id) initWithTitle:(NSString *)release_name;
+ (id) upcomingReleaseWithName:(NSString *)release_name;

@end

即将发布.m

@implementation UpcomingRelease

- (id) initWithTitle:(NSString *)release_name {
    self = [super init];

    if ( self ){
        self.release_name = release_name;
    }

    return self;
}

+ (id) upcomingReleaseWithName:(NSString *)release_name {
    return [[self alloc] initWithTitle:release_name];
}

@end

我应该为我的新应用程序创建一个 NSObject 并添加该代码,还是应该将它添加到我的 UpcomingReleaseCell 中?

谢谢。

4

2 回答 2

1

您是否注册了自定义单元格?

    [self.collectionView registerClass:[UpcomingReleaseCell class] forCellWithReuseIdentifier:@"UpcomingReleaseCell"];
于 2013-09-04T18:05:11.097 回答
0
  1. 使用情节提要时无需注册单元格

  2. 从情节提要中选择 CollectionViewCell 并通过选择在身份检查器中将类更改为“UpcomingReleaseCell”

  3. 在collectionviewcell中添加标签并将单元格连接到名称为“release_name”的“UpcomingReleaseCell”

  4. 在“cellForItemAtIndexPath”中添加以下内容

    (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    
    UpcomingReleaseCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
    // Configure the cell
    
    UpcomingRelease *upcomingrelease = [self.upcomingReleases objectAtIndex:indexPath.row];
    
    cell.release_name.text = upcomingrelease.release_name;
    
    return cell;
    }
    
于 2016-01-28T12:41:41.367 回答