对于循环忽略,滚动视图中的uibutton的isKindOfClass

时间:2012-05-14 12:27:07

标签: ios for-loop tags

我有一个代码,用于创建,添加和标记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];
}

2 个答案:

答案 0 :(得分:5)

for (UIView *subview in [uiv_ButtonsView subviews]) {

subView是uiv_ButtonsView的子视图

if([subview isKindOfClass:[UIButton class]]) {

subViewUIButton

[[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]