【问题标题】:For loop ignoring isKindOfClass for uibuttons in scrollviewFor循环忽略滚动视图中uibuttons的isKindOfClass
【发布时间】:2012-05-21 22:29:25
【问题描述】:

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

【问题讨论】:

    标签: ios for-loop tags


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      for (UIView *subview in [uiv_ButtonsView subviews]) {
      

      subView 是 uiv_ButtonsView 的子视图

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

      subViewUIButton

      [[subview viewWithTag:number] setBackgroundColor:[UIColor redColor]]; 
      

      嗯。现在你得到了 UIButton 的子视图 of,标签为 0 - 这是所有视图的默认标签。你在 UIButton 的私有视图层次结构中,我们不知道这是什么。

      UIButton *btttn = (UIButton *)[subview viewWithTag:number]; 
      

      再次相同 - 您已告诉编译器您从该调用中获得了一个按钮,但您不会。 subView 已经是一个按钮,按钮没有其他按钮作为子视图。

      [btttn setBackgroundImage:nil forState:UIControlStateNormal];
      

      所以这行代码行不通。

      我不明白为什么你要么在subView 上进行所有操作,要么使用[uiv_ButtonsView viewWithTag:xx] 来获取你的按钮。在后一种情况下,您需要从 1 开始标签,因为所有视图的默认标签都是 0。

      【讨论】:

      • 这个清晰的代码演练 - 我应该为自己完成 - 帮助了我。我的新代码发布在上面。感谢 Rob Ryan 也让我朝着正确的方向前进。
      猜你喜欢
      • 2018-11-28
      • 1970-01-01
      • 2017-04-29
      • 2021-12-19
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 2016-12-24
      相关资源
      最近更新 更多