0

我有一个自定义 UIButton 子类。实际上很多。

所以我想在 for-in 循环中通过我的 containerView.subviews 枚举所有这些。但是当我像这样运行它时:

for (CustomButton *button in self.containerView.subviews)
{
    NSLog(@"%@", button.class);
}

...第一个被迭代的对象是一个 UIImageView,它也是一个子视图。为什么 for-in 循环不只给我想要的课程?

4

2 回答 2

5

它将遍历数组中的所有对象并尝试转换为 CustomButton 类。你需要做一些过滤:

for (CustomButton *button in self.containerView.subview)
{
    if ([button isKindOfClass: [CustomButton class]])
       NSLog(@"%@", button.class);
}
于 2013-03-28T15:15:18.687 回答
2

for-in 循环正是它应该做的事情。它遍历容器视图(您的单元格或滚动视图?)的所有子视图。

您可以递归地处理它们,以便您以相同的方式浏览子视图的所有子视图(如果有的话)。至少那是我会做的。

然后你检查类类型(使用 isKindOfClass)并只处理你感兴趣的那些。

您会惊讶地看到一个按钮可能有多少个子视图。

编辑:到目前为止,我还没有解决您的问题的另一个方面。您要求 for-in 循环的“歧视”。它不是循环的一个方面。For-in 简单地迭代容器的所有元素。这可能是一个数组、字典或集合。在您的示例中,您只需将每个对象类型转换为 CustomButton 类型对象。即使您访问自定义按钮独有的属性或方法,编译器也会正确通过。然后将在运行时抛出异常。

于 2013-03-28T15:16:37.020 回答