3

我有在 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];
}
4

2 回答 2

6
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。

于 2012-05-14T12:39:03.163 回答
1

[subview viewWithTag:number]我来说没有意义(你的按钮,子视图,大概没有更多的子视图)。并且通过您的 devicesArray 进行迭代并通过 uiv_ButtonsView 进行嵌套迭代也没有任何意义。如果您使用标签,则不需要遍历 uiv_ButtonsView 的子视图,而是可以使用[uiv_ButtonsView viewWithTag:number].

于 2012-05-14T12:54:13.453 回答