很多时候,我们会遇到这样的一种场景,在一个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;
}
网友评论