我有UITableViewCell,我在其中添加UIView
并在其中,我将子视图添加为UIButton
,UIImageView
。
现在我想在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 ... 答案 0 :(得分:6)
我没有完全解决你的问题,但可能在使用方法-isKindOfClass
时存在误解。特别是该方法对类和子类的响应是,UIButton
,UITableView
等是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]]) {