[myView isKindOfClass:[UIView class]]给出了奇怪的结果

时间:2014-11-08 12:35:01

标签: ios objective-c uitableview uiview

我有UITableViewCell,我在其中添加UIView并在其中,我将子视图添加为UIButtonUIImageView

现在我想在willDisplayCell中访问UIView。为此,我在下面。

NSArray *subviews;
subviews = cell.subviews;

int xxyyzz = 1;
for(id aView in subviews) {
    NSLog(@"aView====%@" , [UIView class]);
    if([aView isKindOfClass:[UIView class]]) {
        NSLog(@"This is UIView... Do what you want to do...");
    }
}

然而,当我跑步时,我得到This is UIView... Do what you want to do...所有子视图(即UIButton,UIImageView等)。 aView====UIView

我相信这是因为,UIView是所有对象的超类。

我有办法只能访问UITableViewCell内的UIView ...

2 个答案:

答案 0 :(得分:6)

我没有完全解决你的问题,但可能在使用方法-isKindOfClass时存在误解。特别是该方法对类和子类的响应是,UIButtonUITableView等是UIView的子类,因此该方法按预期工作,这里的文档:

  

返回一个布尔值,指示接收器是否为   给定类的实例或继承自的任何类的实例   那个班。

很可能你想使用只考虑对象是特定类的实例的-isMemberOfClass
如果您正在检查的对象来自类集群,例如NSArray,引用Apple文档,您还必须使用该方法注意:

  

在类所代表的对象上使用此方法时要小心   簇。由于类簇的性质,你得到的对象   返回可能并不总是您期望的类型。如果你打电话给方法   返回一个类集群,该方法返回的确切类型是   您可以使用该对象执行的最佳指示。例如,   如果方法返回指向NSArray对象的指针,则不应使用   此方法查看数组是否可变,如下所示   代码:

// DO NOT DO THIS! if ([myArray isKindOfClass:[NSMutableArray class]])
{
    // Modify the object 
} 
  

如果您在代码中使用此类构造,您可能会认为它没问题   修改现实中的对象   不应该修改。这样做可能会给其他人带来麻烦   期望对象保持不变的代码。

     

如果接收者是类对象,则此方法如果是aClass则返回YES   是一个相同类型的Class对象,否则为NO。

答案 1 :(得分:0)

我所做的是我创建了自定义UIView,如下所示。

 MyCustomView *mview = [[MyCustomView alloc] initWithFrame:...

然后在此自定义视图中添加了UIButton,UIImageView。

现在在比较时,我检查了如下。

if([aView isKindOfClass:[MyCustomView class]]) {