0

首先,如果答案很明显,但我对 iOS 开发是全新的(就像这是我尝试编程的第一个应用程序,即使它只是为了我玩:P),所以我的问题的可能性是相当轻微是相当高的。

代码(包含 xcode 项目的 zip 文件)

http://www.mediafire.com/?p55xw0q2dwwwwvm

我保证那里没有其他有害的东西:)。

问题:

我正在跟进:

http://www.techotopia.com/index.php/An_iPhone_iOS_6_Storyboard-based_Collection_View_Tutorial

我正在尝试制作一个 UICollectionView 来玩。我进入了“测试应用程序”部分。我对指南中的几个部分进行了自己的解释:

  1. 而不是使用不同的图片,我只使用 1 张图片,底部有一个标签,里面只有一个数字。数字是动态设置的。是的,我可以在没有我正在使用的数组的情况下实现它,但是如果我将来扩展这个项目的范围,那么拥有那个数组将会很有帮助。

  2. 我在 viewDidLoad 中添加了代码以将视图布局设置为流式布局。再次这样做是为了面向未来,因为一旦我以基本形式进行工作,我想使用格式,这将需要我对 flowlayout 进行子类化。

代码编译没有错误,但屏幕上没有任何显示。我已经尽我所能检查代码大约一两个小时,但我所做的没有任何改变。我的控制器类是一个简单的骨架,试图让集合视图显示在屏幕上,而我的单元类是一个骨架单元,其中只有一个图像视图和标签。

感谢您提供任何帮助以使其正常工作!

tl; dr 看看加粗的东西。为方便起见,提供以下代码:

MyCollectionViewController.m

#import "MyCollectionViewController.h"

    @interface MyCollectionViewController ()
    @property (nonatomic, strong) NSMutableArray *dataArray;
    @end

    @implementation MyCollectionViewController

    @synthesize dataArray = _dataArray;

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }

    - (void)viewDidLoad
    {
        [super viewDidLoad];

        // Create data to display
        for(int i = 0; i < 50; i++){
            [self.dataArray addObject:[NSString stringWithFormat:@"%d", i]];
        }

        // Configure Layout
        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
        [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
        [self.collectionView setCollectionViewLayout:flowLayout];

    }

    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

    #pragma mark -
    #pragma mark UICollectionViewDataSource

    -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
    {
        return 1;
    }

    -(NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section
    {
        return [self.dataArray count];
    }

    -(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
        MyCollectionViewCell *myCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
        int row = [indexPath row];
        UIImage* image = [UIImage imageNamed:@"200px-AND_ANSI"];
        myCell.cellTitle = [self.dataArray objectAtIndex:row];
        myCell.cellImageView.image = image;
        myCell.backgroundColor = UIColor.whiteColor;

        return myCell;
    }

MyCollectionViewcontroller.h

#import <UIKit/UIKit.h>
#import "MyCollectionViewCell.h"

@interface MyCollectionViewController : UICollectionViewController <UICollectionViewDataSource, UICollectionViewDelegate>

@end

MyCollectionViewCell.h

#import <UIKit/UIKit.h>

@interface MyCollectionViewCell : UICollectionViewCell
@property (strong, nonatomic) IBOutlet UIImageView *cellImageView;
@property (strong, nonatomic) IBOutlet UILabel *cellTitle;

@end

我的CollectionViewCell.m

#import "MyCollectionViewCell.h"

@implementation MyCollectionViewCell

@synthesize cellImageView = _cellimageView;
@synthesize cellTitle = _cellTitle;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end
4

1 回答 1

1

self.dataArray在您的代码中没有分配/初始化,因此等于nil. 允许发送消息nil,但没有效果,因此即使在

for(int i = 0; i < 50; i++){
    [self.dataArray addObject:[NSString stringWithFormat:@"%d", i]];
}

self.dataArray还在nil,又[self.dataArray count]回来了0

您必须分配和初始化数组

self.dataArray = [[NSMutableArray alloc] init];

一个合适的地方是initXXX视图控制器的一些方法。但是initWithNibName:如果视图控制器是从情节提要文件中实例化的,则不会调用,您必须initWithCoder:改用:

- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        self.dataArray = [NSMutableArray array];
    }
    return self;
}
于 2013-01-21T06:20:43.377 回答