【问题标题】:How To Access All UIButtons within a UIScrollView within a UIView?如何在 UIView 中访问 UIScrollView 中的所有 UIButton?
【发布时间】:2014-11-20 12:43:44
【问题描述】:

我正在使用以下内容尝试访问位于 UIView 内的 UIScrollView 内的所有 UIButton。问题是代码似乎没有找到按钮并设置边框属性。

UIView -> UIScrollView -> UIButtons.

我基本上是想循环遍历按钮并设置边框属性。

for(UIView *v in [self.viewLightLeakChoices subviews]) {

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

        v.layer.borderWidth = 0;

    }

}

【问题讨论】:

  • 您的代码在 xCode 6.1 和目标 SDK 7.1 上运行良好
  • viewLightLeakChoicesUIScrollView 还是 UIView ?
  • 你确定你到达了 uibutton
  • 尝试一次 CALayer *btnlayer=v.layer; btnlayer.borderWidth=0;
  • OP,你得到了很多答案,这让这个问题变得比实际更复杂,但我认为回答 @Chinttu-Maddy-Ramani 的问题可能是解开这个问题的关键。 .. 具体来说,您需要确保循环浏览您的 scrollview 子视图,而不是您的 view 子视图。

标签: ios objective-c uiview


【解决方案1】:

试试这个

for (id obj in scrollView.subviews) {

    NSString *classStr = NSStringFromClass([obj class]);

    if ([classStr isEqualToString:@"UIButton"]) {
        UIButton *button = (UIButton*)obj;
        button.layer.borderWidth = 2.0;
        button.layer.borderColor = [UIColor greenColor].CGColor;
    }
}

输出

【讨论】:

    【解决方案2】:

    感谢各位的帮助。我最终做了一堆 for 循环来了解 UIButtons。

    for(UIView *v in [self.viewLightLeakChoices subviews]) {
    
        if([v isKindOfClass:[UIScrollView class]]) {
    
            for(UIView *subView in [v subviews]) {
    
                for(UIButton *btn in [subView subviews]) {
    
                    btn.layer.borderWidth = 0;
    
                }
    
            }
    
        }
    
    }
    

    【讨论】:

    • 但我以为你只有一个 UIScrollView...?如果是这样,您可以在原始代码中将 [self.viewLightLeakChoices subviews] 替换为 [self.yourScrollView subviews]。
    • 如果您只有一个滚动视图,则将标签分配给滚动视图并直接使用标签访问。所以现在for(UIView *v in [self.viewLightLeakChoices subviews]) 没有用了,像UIScrollView *scrlV = [viewLightLeakChoices viewWithTag:1000]; 一样使用你想要的设置标签。然后for(UIButton *subView in [scrlV subviews])
    • 谢谢。它节省了我的时间。
    【解决方案3】:

    首先确保您获得UIScrollView 的子视图,因为您的结构是

    UIView > UIScrollView> UIButton

    如果您在self.viewLightLeakChoices 中只有 1 个滚动视图,则设置您的滚动视图标签 = 1000 并直接访问您的滚动视图,因此现在您不需要使用循环。并且执行会很快。

    UIScrollView *scrlV = [self.viewLightLeakChoices viewWithTag:1000];
    for (UIButton *btn in scrlV.subviews) 
    {
        if ([btn isKindOfClass:[UIButton Class]]) {
            btn.layer.borderWidth = 1.0;
            btn.layer.borderColor = [UIColor whiteColor].CGColor;
        }
    }
    

    【讨论】:

      【解决方案4】:

      我无法得到我期待你有滚动视图 -> uiview ->按钮

       for(UIView *myview in Scrollview.subviews)
      {
      
          for ( id mybutton in myview.subviews)
          {
              if ([mybutton isKindOfClass:[UIButton class]])
              {
                  UIButton *mybtn=(UIButton *)mybutton;
                  mybtn.layer.borderWidth=0;
              }
          }
      }
      

      【讨论】:

        【解决方案5】:

        您应该创建 Button 类,例如 MyButton 扩展 UIButton,如果您这样做,则无需遍历滚动视图的子视图。

        实现 awakeFromNib 方法并应用边框,要应用边框请参考此 SO Post How to create border in UIButton?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-08
          • 1970-01-01
          • 1970-01-01
          • 2016-11-28
          • 1970-01-01
          • 2012-03-18
          相关资源
          最近更新 更多