isKindOfClass在iOS 7中不起作用

4
以下代码在 IOS 5.0、6.0、6.1 等版本上返回“YES”,但在 IOS 7.0 上返回“NO”。您有什么想法吗?这是 IOS 7.0 的一个 bug 吗? 谢谢。
[view isKindOfClass:[SimpleLabel class]]

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

----更新----

抱歉问题不够清晰。 :( 我在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;

7
请注意,iOS7和Xcode 5仍受到NDA的保护,这会限制你在官方苹果开发者论坛以外讨论相关内容。 - rckoenes
5
我猜你的“视角”是空的。 - John Estropia
4
这个问题似乎不适合讨论,因为它涉及到受 NDA 保护的 iOS 7。 - Wain
8
如有人因保密协议而想要下降或关闭投票,请查看此链接:Should moderators enforce NDAs for software vendors? 以及相关问题。SO并不负责执行或监管其他方之间的保密协议,也不是其政策、职责或关注点。询问任何可能被任何形式的保密协议覆盖的主题不是离题的。请记住,翻译后的内容应该与原文意思相同,并且更通俗易懂。 - jscs
2
我已经有一段时间没有查看苹果的iOS NDA了,因为我目前没有订阅iOS开发者计划,但是那些声称这个问题违反了iOS7 NDA的人可能正在违反iOS7 NDA。NDA通常有一个条款,防止你讨论NDA涵盖的内容 :) - JeremyP
显示剩余9条评论
1个回答

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随时可以更改它们。


谢谢Gabriele,我会查看并向您反馈。 - seymatanoglu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接