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

mal*_*974 3 tags for-loop ios

我有一些代码可以在uiview中创建,添加和标记uiview中的unbuttons.在某一点上,我尝试用某些标签更改(背景颜色和图像)一些解开按钮.问题是如果我选择带有标记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];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢 - 这是现在正在运行的代码:

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];
}
Run Code Online (Sandbox Code Playgroud)

jrt*_*ton 6

for (UIView *subview in [uiv_ButtonsView subviews]) {
Run Code Online (Sandbox Code Playgroud)

subView 是uiv_ButtonsView的子视图

if([subview isKindOfClass:[UIButton class]]) {
Run Code Online (Sandbox Code Playgroud)

subView 是一个 UIButton

[[subview viewWithTag:number] setBackgroundColor:[UIColor redColor]]; 
Run Code Online (Sandbox Code Playgroud)

嗯.现在,你得到一个子视图的UIButton的,具有触杀0 -这是所有视图的默认标签.你在这里是UIButton的私人视图层次结构,我们不知道这是什么.

UIButton *btttn = (UIButton *)[subview viewWithTag:number]; 
Run Code Online (Sandbox Code Playgroud)

同样 - 你告诉编译器你从这个电话回来了一个按钮,但你不会.subView已经是一个按钮,按钮没有其他按钮作为子视图.

[btttn setBackgroundImage:nil forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

所以这行代码不起作用.

我不明白你为什么要做你所有的操作subView,或者[uiv_ButtonsView viewWithTag:xx]用来拿你的按钮.在后一种情况下,您需要将标记设置为1,因为所有视图的默认标记都为0.