【问题标题】:how to check if the class is created by user of it is a class provided in pobjective-c API如何检查该类是否由用户创建它是pobjective-c API中提供的类
【发布时间】:2019-11-08 18:24:39
【问题描述】:

我有一个 CircularDynamicUIView 类型的用户定义类。它在一个数组中,包含多个视图,例如 'buttonviews、uiimageviews、scrollviews 等。 如何在循环内以编程方式检测此用户定义的类。例如:使用 if 语句

如何检查这个类是否是用户创建或开发的类,而不是objective-c已经创建的类。

【问题讨论】:

  • 您可以检查特定的类。您可以检查它是否是特定类的子类。您可以检查它是否符合协议。但是没有办法区分“你的”类和来自特定框架的类。您应该更新您的问题并阐明您实际尝试解决的问题,以便为实际问题提供适当的解决方案。

标签: objective-c uiview uiscrollview uiimageview


【解决方案1】:

正如@rmaddy 在 cmets 中指出的那样,您无法明确区分,例如,您的自定义 CircularDynamicUIView 子类和默认 UIView ... 但您可以按特定顺序进行评估。

示例(使用您之前的问题):

for (id uiComponent in uiviews) {

    if ([uiComponent isKindOfClass:[CircularDynamicUIView class]]) {
        NSLog(@"Yes, it is a CircularDynamicUIView");
    } else {
        NSLog(@"No, it is NOT a CircularDynamicUIView");
    }

    // if CircularDynamicUIView is a subclass descendant of UIView
    // this will also be true
    if ([uiComponent isKindOfClass:[UIView class]]) {
        NSLog(@"Yes, it is a UIView");
    } else {
        NSLog(@"No, it is NOT a UIView");
    }

}

由于两个if 条件都为真,因此如果第一个测试为真,您将不想评估第二个if

同样,根据您之前的问题,您可以使用这种方法:

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

    if ([uiComponent isKindOfClass:[CircularDynamicUIView class]]) {
        cdView = (CircularDynamicUIView *)uiComponent;
    } else if ([uiComponent isKindOfClass:[UIImageView class]]) {
        uiImageView = (UIImageView *)uiComponent;
    } else if ([uiComponent isKindOfClass:[UIView class]]) {
        uiView = (UIView *)uiComponent;
    }


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

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2020-04-06
    • 1970-01-01
    • 2020-05-15
    • 2018-07-28
    • 2021-10-26
    相关资源
    最近更新 更多