如何将类型为id的对象转换或设置为其他类型,例如UIImageView或UIView

问题描述 投票:0回答:1

在下面的代码中,我遍历条目,它们可能是UIView或UIImageView类型。我想检查uiComponent是否为上述类型之一,然后我要根据以下代码继续使用该uiComponent是UIView还是UIImageView?

我死掉了下面的代码,但是我不能使用指针对象

uiComponent

键入后?

[请让我知道如何在UIView或UIImageView类中键入uiComponent对象,然后继续使用它进行编程

代码

 for (id uiComponent in uiviews) {
            UIView *uiView;
            UIImage *uiImageView;

         if ([AQSViewHelper isEntryOfTypeUIView:uiComponent]) {
                uiComponent = (UIView *)uiComponent;
         }
            if ([AQSViewHelper isEntryOfTypeUIImageView:uiComponent]) {
            uiComponent = (UIImageView *)uiComponent;
        }

         if (![uiComponent isHidden]) {
            …
    ..
    …
            }
objective-c uiview casting uiimageview id
1个回答
0
投票

根据类型设置本地对象,如果不是nil,则使用它:

for (id uiComponent in uiviews) {
    UIView *uiView;
    UIImageView *uiImageView;

    if ([AQSViewHelper isEntryOfTypeUIView:uiComponent]) {
        uiView = (UIView *)uiComponent;
    }
    if ([AQSViewHelper isEntryOfTypeUIImageView:uiComponent]) {
        uiImageView = (UIImageView *)uiComponent;
    }

    if (uiView) {
        // do what you want because it's a UIView
        if ([uiView isHidden]) {
            // ...
        }
        // etc ...
    }
    if (uiImageView) {
        // do what you want because it's a UIView
        if ([uiImageView isHidden]) {
            // ...
        }
        // etc ...
    }
}

或者,由于您已经在if块中,因此可以在此处进行:

for (id uiComponent in uiviews) {
    if ([AQSViewHelper isEntryOfTypeUIView:uiComponent]) {
        // do what you want because it's a UIView
        UIView *uiView = (UIView *)uiComponent;
        if ([uiView isHidden]) {
            // ...
        }
        // etc ...
    }
    if ([AQSViewHelper isEntryOfTypeUIImageView:uiComponent]) {
        // do what you want because it's a UIImageView
        UIImageView *uiImageView = (UIImageView *)uiComponent;
        if ([uiImageView isHidden]) {
            // ...
        }
        // etc ...
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.