4

以下のコードは、IOS 5.0、6.0、6.1 などでは「YES」を返しますが、IOS 7.0 では「NO」を返します。それについて何か考えはありますか?IOS 7.0 のバグですか?どうもありがとう..

[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;
4

1 に答える 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探している場所よりも 1 レベル深い に挿入されます。

isKindOfClass:問題は、サブビューの間違ったセットを使用していることです。

ところで、これは内部のビュー階層に依存してはいけない理由の素晴らしい例です。Apple はいつでもビュー階層を変更できます。

于 2013-10-18T06:03:42.513 に答える