我有一个代码,用于创建,添加和标记uiview中的解开按钮,该uiview本身位于uiscrollview中。在某一点上,我尝试用某些标签更改(背景颜色和图像)一些解开按钮。问题是如果我选择带有标记0的第一个按钮,for循环炸弹用于图像更改,因为uiscrollview或uiview没有该方法可用。但我试图只针对视图中的解开按钮(全部同步)。如果我选择任何其他按钮,它按预期工作。我可以将标签从0偏移到1,但我想知道为什么我的for循环不起作用。
for (int i=0; i<[devicesArray count]; i++) {
NSLog(@"red %i", i);
for (UIView *subview in [uiv_ButtonsView subviews]) {
if([subview isKindOfClass:[UIButton class]]) {
int number = [[devicesArray objectAtIndex:i] intValue];
subview.alpha=1.0;
[[subview viewWithTag:number] setBackgroundColor:[UIColor redColor]];
UIButton *btttn = (UIButton *)[subview viewWithTag:number];
[btttn setBackgroundImage:nil forState:UIControlStateNormal];
}
}
}
谢谢 - 这是现在正在运行的代码:
for (int i=0; i<[devicesArray count]; i++) {
int number = [[devicesArray objectAtIndex:i] intValue];
[[uiv_Quilt viewWithTag:number] setBackgroundColor:[UIColor redColor]];
[[uiv_Quilt viewWithTag:number] setBackgroundImage:nil forState:UIControlStateNormal];
}
答案 0 :(得分:5)
for (UIView *subview in [uiv_ButtonsView subviews]) {
subView
是uiv_ButtonsView的子视图
if([subview isKindOfClass:[UIButton class]]) {
subView
是UIButton
[[subview viewWithTag:number] setBackgroundColor:[UIColor redColor]];
嗯。现在,您正在获取 UIButton的子视图,标记为0 - 这是所有视图的默认标记。你在这里是UIButton的私人视图层次结构,我们不知道这是什么。
UIButton *btttn = (UIButton *)[subview viewWithTag:number];
同样 - 你告诉编译器你从这个电话回来了一个按钮,但你不会。 subView
已经是一个按钮,按钮没有其他按钮作为子视图。
[btttn setBackgroundImage:nil forState:UIControlStateNormal];
所以这行代码不起作用。
我不明白为什么要对subView
进行所有操作,要么使用[uiv_ButtonsView viewWithTag:xx]
来获取按钮。在后一种情况下,您需要将标记设置为1,因为所有视图的默认标记都为0.
答案 1 :(得分:1)
[subview viewWithTag:number]
对我没有意义(你的按钮,子视图,可能没有进一步的子视图)。而通过uiv_ButtonsView进行嵌套迭代的devicesArray迭代也没有意义。如果您正在使用标签,则不需要遍历uiv_ButtonsView的子视图,而是可以使用[uiv_ButtonsView viewWithTag:number]
。