5

UIViewにSubviewとして追加された特定のクラス オブジェクトを見つけようとしていますが、何も見つかりませんでした。

4

6 に答える 6

25
for(UIView *aView in yourView.subviews){
    if([aView isKindOfClass:[YourClass class]]){
       //YourClass found!!
    }
}
于 2013-06-26T12:37:57.823 に答える
3

たとえば、タイプ UILabel クラスのオブジェクトを見つけている場合は、以下のように表示されます。

for (UIView *subView in [weeklyViewA subviews]) {
            if ([subView isKindOfClass:[UILabel class]]) {
                NSLog(@"label class :: %@", [subView description]);
            }
        }
于 2013-06-26T13:10:12.633 に答える
2

迅速な回答

この場合、 ,first.whereよりも効率的なSwift の構文を使用できると思います。filter.countfilter.isEmpty

を使用するfilterと、基礎となる配列が作成されるため、効果的ではないため、大きなコレクションがあると想像してください。

ビューのsubViewsコレクションに特定の種類のクラスが含まれているかどうかを確認するだけで、これを使用できます

let containsBannerViewKind = view.subviews.first(where: { $0 is BannerView }) != nil

これは、このビューの subViews コレクションで BannerView クラスに最初に一致するものを見つけてください。したがって、これが正しい場合は、さらにロジックを実行できます。

参照: https://github.com/realm/SwiftLint/blob/master/Rules.md#first-where

于 2017-09-21T03:55:40.877 に答える
0

これは、チェックされたソリューションの迅速なバージョンです:

UITextField の例:

    for (_, view) in self.myView.subviews.enumerate(){
        if view.isKindOfClass(UITextField){
            //Here we go
        }
    }
于 2016-07-01T13:36:21.423 に答える
0

私の意見では。isMemberOfClass:よりも優れisKindOfClass:ています。例:

for (BadgeButton *button in self.subviews) {
    if ([button isMemberOfClass:[BadgeButton class]]) {
        button.selected = NO;
    }
}
于 2017-05-17T14:07:06.423 に答える