0

これが、サブビューを作成してビューに追加する方法です。

「数百」を返す必要があるのに、なぜカウントが常に0を返すのか疑問に思っています。私は何を間違っていますか、ありがとう!

私の問題を明確に示すコードを追加しました。最初の質問に関連するすべての機能をコピーして貼り付けました。

    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];

        [self.contenedor addSubview:vistaPanelBotones];
        [self crearBotones];
    }

    - (void) crearBotones {
    UIColor *colores[] = {
        [UIColor blueColor],
        [UIColor brownColor],
        [UIColor redColor],
        [UIColor orangeColor],
        [UIColor greenColor],     
        [UIColor yellowColor],
        [UIColor purpleColor],
        [UIColor blackColor],
        [UIColor whiteColor],
        [UIColor darkGrayColor],
        [UIColor magentaColor],
        [UIColor cyanColor],
    };

    int indice = 0;
    for (int col = 0; col < self.vistaPanelBotones.frame.size.width ; col=col+20) {
        for (int fila = 0; fila < self.vistaPanelBotones.frame.size.height-20 ; fila = fila+20) {

            CGRect frame = CGRectMake(col, fila, 20, 20);

            Boton *boton = [Boton new];
            boton.frame = frame;
            boton.layer.backgroundColor = colores[(fila + col) % 7].CGColor;
            boton.layer.cornerRadius = 0.25;
            boton.layer.borderWidth = 0.25;
            boton.layer.borderColor = [UIColor whiteColor].CGColor;
            boton.layer.delegate = self;
            [self.vistaPanelBotones addSubview:boton];
            [boton setNeedsDisplay];    
        }
        indice++;
    }   
    NSLog(@"Vista Botones SubViews:%i",[[self.vistaPanelBotones subviews] count]); 

}

- (IBAction)reiniciar:(id)sender {

    if (self.vistaPanelBotones == nil){
        NSLog(@"no existe la vista"); 
    }
    NSUInteger count = self.vistaPanelBotones.subviews.count;
    NSLog(@"Vista SubViews: %i",count); 

}
4

2 に答える 2

1

ここに私の考えのいくつかがあります:

  1. 念のため、self.vistaPanelBotones が非 nil かどうかを確認します (nil の場合、そのコードでエラーは発生しませんが、サブビューも発生しません)。
  2. 有効なフレームを取得する前にこれを実行する可能性があります (IIRC、viewWillAppear は有効なジオメトリを持つ最も早いコールバックです)
  3. boton が nil の場合、サブビューとして追加するときに例外が発生することは間違いありませんが、デバッグに使用する価値のある別のテストです。
于 2012-06-15T16:33:35.857 に答える
1

[[self.vistaPanelBotones subviews] count] を使用してサブビューの数を数えますが、Objective-C のビューからすべてのサブビューを削除する洗練された方法があります。これを試して:

 [[self.vistaPanelBotones subviews] makeObjectsPerformSelector:@selector(removeFromSuperView];
于 2012-06-15T16:34:10.063 に答える