查找 view.subviews 内的所有按钮

Finding all buttons within view.subviews

我正在尝试为自定义数字键盘创建圆形按钮。我想通过这个快速枚举循环查找和修改所有按钮:

for (UIView *subview in self.view.subviews)
{
    if ([subview isKindOfClass:[UIButton class]])
    {
        NSLog(@"found a button!");
        subview.layer.borderWidth = 1.0f;
        subview.layer.borderColor = [[UIColor whiteColor] CGColor];
        [subview.layer setCornerRadius: subview.frame.size.width/2.0f];
        NSLog(@"button.tag = %ld", (long)subview.tag);

    }

不起作用。

所以我环顾四周,发现this question。但是,即使我的方法似乎遵循已接受答案中概述的方法,if 语句也找不到按钮。页面上的其他答案看起来过于复杂,无法满足我的需求。

谁能告诉我哪里出错了?

编辑

回复@luk2303 的评论:

我相信所有相关按钮确实直接在 view 中。这是故事板中层次结构的屏幕截图:

第二次编辑

根据@tomer 的建议,我修改了代码:

for (UIControl *subview in self.view.subviews)
{
    NSLog(@"inside loop");

    if ([subview isKindOfClass:[UIButton class]])
    {
        subview.layer.borderWidth = 1.0f;
        subview.layer.borderColor = [[UIColor whiteColor] CGColor];
        [subview.layer setCornerRadius: subview.frame.size.width/2.0f];
        NSLog(@"button.tag = %ld", (long)subview.tag);

    }
}

遗憾的是,结果没有改善。

第三次编辑

这是子视图的打印输出,显然不包括所需的按钮...

2016-06-12 14:27:10.352 appName[5983:3143970] <_UILayoutGuide: 0x12f6912b0; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x12f691020>>
2016-06-12 14:27:19.419 appName[5983:3143970] <_UILayoutGuide: 0x12f6918b0; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x12f691a30>>
2016-06-12 14:27:21.988 appName[5983:3143970] <UIImageView: 0x12f691040; frame = (516 209; 49 49); autoresize = RM+BM; layer = <CALayer: 0x12f6911f0>>

通过设置每个 UIButton 的 "tag" 属性,这可以在 Interface Builder 中或以编程方式完成:

      button.tag = n;    // n being whatever integer value you decide.

您的 IF 语句,这似乎是导致问题的原因,现在可以简单地比较两个整数值...

      if(subview.tag == n) {  // n still being the integer value you've set
         ...
         // Implement desired code for each UIButton here
         ...
      }

您可以在此处使用界面生成器更改 标签 属性:

根据您的屏幕截图,您已经将它们放在情节提要中,因此您不需要 "find" 它们,它们就在这里。

执行以下操作:

Link 通过使用右键单击或 ctrl+clic 从故事板拖放到 .h 文件,将所有按钮添加到您的 .h 文件。就像您想创建一个插座一样。 (通过打开助手编辑器,屏幕右上角的中间按钮)。

一旦Xcode询问您是否要添加Outlet,或Outlet collection,或Action,请选择"Outlet Collection",并将其命名为"AllButtons"。

对每个按钮重复该过程,除了不是创建新的出口集合,而是 link 最近创建的出口集合的每个按钮。

现在您所有的按钮都是该集合的一部分,如果您愿意,也可以是数组。

从您的 .m 文件中,您可以使用 属性 并在其上循环,就像您处理子视图一样。

 foreach (UIButton *button in AllMyButtons){

  // Do your stuff here.
 }

就是这样。仅此而已:)