Iphone 在ios中计算并从视图中删除子视图

Iphone 在ios中计算并从视图中删除子视图,iphone,ios5,uiview,Iphone,Ios5,Uiview,这是我创建子视图并将其添加到视图中的方法 我想知道为什么计数总是返回0,而它应该返回“数百”。我做错了什么,谢谢 我添加了更多代码,清楚地显示了我的问题。我复制/粘贴了我最初问题中涉及的所有函数 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.contenedor addSubview:vistaPanelBotones];

这是我创建子视图并将其添加到视图中的方法

我想知道为什么计数总是返回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); 

}
-(void)视图将显示:(BOOL)动画
{
[超级视图将显示:动画];
[self.contendor addSubview:vistaPanelBotones];
[自我陶醉];
}
-(空)白蜡石{
UIColor*颜色[]={
[UIColor blueColor],
[UIColor BROWNCOCLOR],
[UIColor redColor],
[UIColor orangeColor],
[UIColor绿色],
[UIColor yellowColor],
[UIColor紫色],
[UIColor blackColor],
[UIColor whiteColor],
[UIColor darkGrayColor],
[UIColor洋红色],
[UIColor cyanColor],
};
int-indice=0;
用于(int col=0;col
以下是我的一些想法:

  • 我会检查self.vistaPanelBotones是否为非nil,以防万一(如果为nil,您不会在该代码中得到任何错误,也不会得到任何子视图)
  • 可能在获得有效帧之前执行此操作(IIRC、VIEWWILLEXPEND是具有有效几何体的最早回调)
  • 我很确定,如果boton为nil,则在作为子视图添加时会出现异常,但这是另一个值得用于调试的测试

  • 使用[[self.vistaPanelBotones subview]count]计算子视图的数量,但有一种优雅的方法可以从Objective-C中的视图中删除所有子视图。请尝试以下方法:

     [[self.vistaPanelBotones subviews] makeObjectsPerformSelector:@selector(removeFromSuperView];
    

    你什么时候运行这个代码?ViewController的生命周期中有一些重要的点是特定于其视图几何体的。此时您可能没有有效的帧。这会导致几何图形不好,但子视图计数为正。更有可能:self.vistapanelbotone为零。在添加子视图之前,请将其记录下来。关于我何时运行此代码,我在一个名为in(void)viewDidLoad的函数中执行此操作。它在代码的任意位置返回0。ie我创建了一个IBaction来打印一个视图中的子视图数-(IBaction)reiniciar:(id)sender{nsuiger count=self.vistaPanelBotones.subviews.count;NSLog(@“Vista子视图:%I”,count);}是的,在viewDidLoad中,您不能依赖于框架属性。尝试将此处发布的代码移动到ViewWillDisplay,并查看结果。在ViewWillDisplay中也尝试了此操作,得到了相同的结果:-(.我添加了更多代码以供查看;)。感谢大家的帮助当我通过viewcontroller中的按钮调用iAction时,它不会写入日志,因此self.vistapanelbotone不是零。。。如果(self.vistaPanelBotones==nil){NSLog(@“no existe la vista”);}感谢您的回复。但是这个代码不起作用。我添加了以下内容:[[self.vistaPanelBotones子视图]makeObjectsPerformSelector:@selector(removeFromSuperView)];[self.vistapanelbotone设置需要显示];但是,视图中的所有子视图仍然显示为未发生任何事件。