isKindOfClass不能像预期的那样工作IOS 7

时间:2013-08-26 07:57:35

标签: ios objective-c ios7

下面的代码在IOS 5.0,6.0,6.1等上返回“YES”,但在IOS 7.0上返回“NO”。 窦你对此有所了解吗? 这是IOS 7.0的错误吗? 非常感谢..

[view isKindOfClass:[SimpleLabel class]]

PS:“SimpleLabel”是一个继承自UILabel的类。

---- ---- UPDATE

对不清楚的问题抱歉。 :( 我在UITableViewCell课程中使用上述代码,并添加SimpleLabel,如下所示;

 [self addSubview:label];

我覆盖layoutSubviews函数,循环在self.subviews,但[view class]始终返回UITableViewCellScrollView

-(void)layoutSubviews {
[super layoutSubviews];
for (UIView*view in self.subviews) {
    if ([view isKindOfClass:[SimpleLabel class]]) {
        SimpleLabel*label = (SimpleLabel*)view;

1 个答案:

答案 0 :(得分:7)

UITableViewCell的视图层次结构在iOS 7中略有改变

在iOS< = 6中,层次结构看起来像

<UITableViewCell>
   | <UITableViewCellContentView>
   |    | <UILabel>

而在iOS 7中,它就像

<UITableViewCell>
   | <UITableViewCellScrollView>
   |    | <UIButton>
   |    |    | <UIImageView>
   |    | <UITableViewCellContentView>
   |    |    | <UILabel>

(来源:http://www.curiousfind.com/blog/646

当您添加子视图时,它会插入UITableViewCellContentView,这比您要查找的位置深一级。

isKindOfClass:正常运行,问题在于您正在浏览错误的子视图集。

顺便说一下,这是一个很好的例子,说明为什么你不应该依赖内部视图层次结构:Apple可以随时更改它们。