很多時(shí)候,我們會遇到這樣的一種場景翅帜,在一個(gè)view的一堆subviews里面找到我們想要的那個(gè)view姻檀,尤其是要在一個(gè)不是我們自己寫的view的subviews中找到那個(gè)想要的view, 這種場景下涝滴,能獲取到這個(gè)view就顯得至關(guān)的有用了绣版。譬如,我們要自定義tableview左滑刪除的樣式時(shí)歼疮,尤其是自定義成一個(gè)特定的圖標(biāo)或者更復(fù)雜的情況杂抽,具體看下面截圖:
image
在這種情況下,我們就需要獲取到這個(gè)tableview下的UISwipeActionStandardButton腋妙,在它上面添加一個(gè)自定義的imageview來顯示圖標(biāo)默怨。
其實(shí)方法也是很簡單的讯榕,就是通過簡單的遞歸遍歷來實(shí)現(xiàn)就行了骤素,具體如下:
//如果找到了就返回找到的view,沒找到的話愚屁,就返回nil
+ (UIView *)getSubViewWithClassName:(NSString *)className inView:(UIView *)inView {
//判空處理
if(!inView || !inView.subviews.count || !className || !className.length || [className isKindOfClass:NSNull.class]) return nil;
//最終找到的view济竹,找不到的話,就直接返回一個(gè)nil
UIView *foundView = nil;
//循環(huán)遞歸進(jìn)行查找
for(UIView *view in inView.subviews) {
//如果view是當(dāng)前要查找的view霎槐,就直接賦值并終止循環(huán)遞歸送浊,最終返回
if([view isKindOfClass:NSClassFromString(className)]) {
foundView = view;
break;
}
//如果當(dāng)前view不是要查找的view的話,就在遞歸查找當(dāng)前view的subviews
foundView = [self getSubViewWithClassName:className inView:view];
//如果找到了丘跌,則終止循環(huán)遞歸袭景,最終返回
if (foundView) break;
}
return foundView;
}