iOS获取一个view对应的子view

2019-12-26  本文已影响0人  Invisible_He

很多时候,我们会遇到这样的一种场景,在一个view的一堆subviews里面找到我们想要的那个view,尤其是要在一个不是我们自己写的view的subviews中找到那个想要的view, 这种场景下,能获取到这个view就显得至关的有用了。譬如,我们要自定义tableview左滑删除的样式时,尤其是自定义成一个特定的图标或者更复杂的情况,具体看下面截图:

image

在这种情况下,我们就需要获取到这个tableview下的UISwipeActionStandardButton,在它上面添加一个自定义的imageview来显示图标。

其实方法也是很简单的,就是通过简单的递归遍历来实现就行了,具体如下:

//如果找到了就返回找到的view,没找到的话,就返回nil
+ (UIView *)getSubViewWithClassName:(NSString *)className inView:(UIView *)inView {
    //判空处理
    if( !inView  ||  !inView.subviews.count ||  !className.length) return nil;
    //最终找到的view,找不到的话,就直接返回一个nil
    UIView *foundView = nil;
    //循环递归进行查找
    for(UIView *view in inView.subviews) {
        //如果view是当前要查找的view,就直接赋值并终止循环递归,最终返回
        if([view isKindOfClass:NSClassFromString(className)]) {
            foundView = view;
            break;
        }
        //如果当前view不是要查找的view的话,就在递归查找当前view的subviews
        foundView = [self getSubViewWithClassName:className inView:view];
        //如果找到了,则终止循环递归,最终返回
        if (foundView) break;
    }
    return foundView;

}
上一篇下一篇

猜你喜欢

热点阅读