多UIView子类在循环中创建

时间:2011-01-07 05:00:36

标签: iphone objective-c

我创建了一个名为“GameCard”的UIView子类

我还创建了xib文件。并添加了一个UIView。

所以我想在循环中添加每个GameCard类

所以我写了这些代码。

- (void)viewDidLoad {
    NSArray *nibViews =  [[NSBundle mainBundle] loadNibNamed:@"GameCard" owner:self options:nil];
    GameCard *aGameCard = [nibViews objectAtIndex:0];
    for (int i = 0; i < [gameWordData1 count]; i++) {
        int x = i / 3;
        int y = i % 3;
        GameCard *bGameCard = [aGameCard copy];
        bGameCard.frame = CGRectMake((10 + y * 100), (x * 70), 100, 70);
        [self.view addSubview:bGameCard];
    }
}

所以我在视图中看到了一个GameCard类

所以我试试这段代码

- (void)viewDidLoad {
for (int i = 0; i < [gameWordData1 count]; i++) {
    int x = i / 3;
    int y = i % 3;
    CGRect rect = CGRectMake((10 + y * 100), (x * 70), 100, 70);
    GameCard *aGameCard = [[GameCard alloc] initWithFrame:rect];
    [self.view addSubview:aGameCard];
    NSLog(@"%i", [[self.view subviews] count]);
}
}

我看到了任何东西。但似乎创建了GameCard类。

我的代码出了什么问题。

抱歉我的英语:)

1 个答案:

答案 0 :(得分:2)

我建议为每个视图加载nib文件。为了加快处理速度,您可以使用UINib而不是NSBundle来加载数据。

- (void)viewDidLoad {
    UINib *nib = [UINib nibWithNibName:@"GameCard" bundle:nil];
    for(int i = 0; i < [gameWordData1 count]; i++) {
        int x = i / 3;
        int y = i % 3;
        NSArray *nibViews = [nib instantiateWithOwner:self options:nil];
        GameCard *aGameCard = [nibViews objectAtIndex:0];
        aGameCard.frame = CGRectMake((10+y*100),(x*70),100,70);
        [self.view addSubview:aGameCard];
    }
}

PS:正如@jamihash在评论中指出的那样,你可能不小心在CGRectMake中切换了x和y。我在你的代码中使用它的方式,但在使用它之前检查它。