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