4

我是从 TableViewCell 派生的。当我查询有关索引路径的表视图时,它返回一个 UITableViewCell。我如何确定该对象是否是我的自定义类型“CustomCell”之一?

4

4 回答 4

3
if ([cell isKindOfClass:[CustomCell class]]) {
    [(CustomCell*)cell customCellMethod];
}
于 2010-04-08T06:07:06.037 回答
2
if ([cell isKindOfClass:[CustomCell class]]) {
   // ...
}
于 2010-04-08T06:07:52.720 回答
1

与面向对象的设计一样,尝试使用实例的类标识是一种代码味道,应该引起注意。你到底想用你的自定义单元做什么?也许有人可以提出更好的方法。

@protocol无论如何,依赖接口( Objective-C 中的一个)比依赖类更好的设计,因为它有助于解耦你的设计。使用您需要的相关 API定义 a@protocol并让您CustomCell实现该协议。然后,您可以在您的代码中测试:

if([cell conformsToProtocol:@protocol(MyCellProtocol)]) {
  //...
}

而不是测试类身份。

如果你只需要一个方法,你可以使用[cell respondsToSelector:@selector(myMethod)].

于 2010-04-08T06:33:15.323 回答
0

实际上,您可以在这里使用两种方法。您可能想要的是isKindOfClass:,但是调用了另一种方法,并且仅当接收者是提供的类的实例而不是子类的实例时isMemberOfClass:才会返回。YES

例如,如果DerivedClass是 的子类BaseClass,那么以下是每个方法的结果:

BOOL isKind = [aDerivedInstance isKindOfClass:[BaseClass class]]; // YES
BOOL isMember = [aDerivedInstance isMemberOfClass:[BaseClass class]]; // NO
于 2010-04-09T04:32:26.770 回答