【问题标题】:[myView isKindOfClass:[UIView class]] giving weird result[myView isKindOfClass:[UIView class]] 给出奇怪的结果
【发布时间】:2014-11-08 12:35:01
【问题描述】:

我有 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...");
    }
}

但是,当我运行时,所有子视图(即 UIButton、UIImageView 等)都会收到 This is UIView... Do what you want to do...aView====UIView

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

有没有办法只能访问我在UITableViewCell 中拥有的 UIView...

【问题讨论】:

  • 您在寻找这个 cell.contentView.subviews 吗?
  • @Shoaib :不,我只想要我创建的 UIView...
  • 你明白了,因为所有视图都是 UIView 的子类。你期待什么?如果你想要一个你创建的视图,显而易见的事情是保持指向它的指针(在自定义单元类中)。否则,您可以标记视图并检查标记,但您需要确保标记不会与另一个标记冲突。
  • @HotLicks :是的,我也遇到了问题和解决方案......
  • @Downvoter : 请详细了解downvote ..

标签: ios objective-c uitableview uiview


【解决方案1】:

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

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

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

在类表示的对象上使用此方法时要小心 簇。由于类簇的性质,你得到的对象 back 可能并不总是您期望的类型。如果你调用一个方法 返回一个类簇,该方法返回的确切类型是 您可以使用该对象做什么的最佳指标。例如, 如果方法返回指向 NSArray 对象的指针,则不应使用 这个方法看数组是否可变,如下图 代码:

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

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

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

【讨论】:

  • 你有我的问题...原因是UIButton,UITableView etc are subclasses of UIView。检查我的解决方案...
【解决方案2】:

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

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

然后在这个自定义视图中添加了UIButton、UIImageView。

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

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

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 2013-08-20
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多