在iOS上,有没有办法只搜索带有某个标签的子视图?

nop*_*ole 2 iphone uiview ios

因为现在,viewWithTag实际上首先搜索自己,然后在整个子树中递归搜索所有子视图,以获得具有该标记的视图.

但是,如果我将子视图的标签设置为100,101等,然后再查找标签100,但是当前视图的父级将当前视图的标签设置为100?然后viewWithTag将返回当前视图而不是任何子视图.

如果代码是,那也很奇怪

[fooView viewWithTag: 123]
Run Code Online (Sandbox Code Playgroud)

为什么代码想要搜索包含fooView本身的子树?就好了,代码不知道fooView足以想要搜索它.或者换句话说,fooView被告知自己搜索......这很奇怪.一个观点不知道自己?(需要搜索才能找到自己?)

那么有没有办法只搜索子视图和宏观子视图(不搜索自己)?

Car*_*zey 7

利用其递归性质 -viewWithTag:

- (UIView *)viewWithTagNotCountingSelf:(NSInteger)tag
{
    UIView *toReturn = nil;

    for (UIView *subView in self.subviews) {
        toReturn = [subView viewWithTag:tag];

        if (toReturn) {
            break;
        }
    }
    return toReturn;
}
Run Code Online (Sandbox Code Playgroud)

编辑:这将比"宏观子视图"向下钻取:它将获得层次结构中不是自我的任何视图.这也是在一个类别中实现的UIView.