2011-01-07 11 views
0

ich eine UIView Unterklasse erstellen, die den Namen „Gamecard“Multi UIView Unterklasse erstellen in Schleife

und ich auch xib Datei erstellen. und fügte eine UIView hinzu.

so will ich jede Gamecard-Klasse hinzufügen, um ivew loopping

so schrieb ich diesen Codes.

- (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]; 
    } 
} 

so sah ich im Hinblick auf eine Gamecard Klasse nur

so versuche ich, diesen Code

- (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]); 
} 
} 

ich anythins im Blick sah. aber es scheint, dass die GameCard-Klasse erstellt wurde.

Was ist falsch mein Code.

traurig über mein Englisch :)

+0

Sind Ihre x- und y-Argumente in der Zeile umgekehrt: CGRect rect = CGRectMake ((10 + y * 100), (x * 70), 100, 70); – jamihash

Antwort

2

würde ich vorschlagen, für jede Ansicht die NIB-Datei geladen werden. Um den Prozess zu beschleunigen, können Sie UINib anstelle von NSBundle verwenden, um die Daten zu laden.

- (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: Wie @jamihash in den Kommentaren erwähnt, können Sie versehentlich eingeschaltet x und y in CGRectMake haben. Ich habe es so verwendet, wie Sie es in Ihrem Code hatten, aber überprüfen Sie es, bevor Sie es verwenden.

+0

+1 "UINib" war nicht bekannt. – Anurag

+0

Also, [nib instanziateWithOwner: self ...] Selbst ist die Ansicht, richtig? Wenn ich den Code vom übergeordneten ViewController schreibe, sollte ich [nib instanziateWithOwner: myCustomView ...] richtig angeben? – aneuryzm

+0

"self" sollte durch das Objekt ersetzt werden, das als Eigentümer der NIB angegeben ist. In der Frage wurde self verwendet, um die Feder zu laden, also habe ich sie auch benutzt, aber Sie sollten jedes Objekt verwenden, das der Besitzer sein soll. – ughoavgfhw

Verwandte Themen