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 是否为非零,以防万一(如果它是零,您将不会在该代码中收到任何错误,但也没有子视图)。
  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 回答