1

こんにちは、customPageControl に取り組んでいます。iOS 6 では問題なく動作していますが、iOS 7 ではアプリがクラッシュします。詳細なシナリオは次のとおりです。

プロジェクトで customPageControl ファイルを使用しています。詳細な CustomPageControl については、このリンクからアクセスできます。iOS 6で[self.subviews objectAtIndex: 1]は戻りますUIImageViewが、iOS 7 では を返しますUIView。そして、私は使用しています

UIImageView * imageView = [self.subviews objectAtIndex: 1];
imageView.image = [UIImage <SomeImage>];

iOS 7 では、imageView を取り、認識されUIViewていないセレクターが送信した例外を与えます。

方向性を教えてください。

4

1 に答える 1

0

この問題の解決策を見つけました。そうではないことは承知していますが、iOS 8 が市場に投入されるまでは確実に機能します。

クラッシュの理由:

iOS 7では、代わりにand is not the property を[self.subViews objectAtIndex: i]返し、アプリがクラッシュします。この次のコードを使用して問題を解決します。UIViewUIImageViewsetImageUIView

サブビューがUIView(iOS7 の場合) またはUIImageView(iOS6 以前の場合) であるかどうかを確認します。もしそうなら、UIView私はUIImageViewそのビューにサブビューとして追加し、出来上がりは機能し、クラッシュしません..!!

-(void) updateDots
{
    for (int i = 0; i < [self.subviews count]; i++)
    {
        UIImageView * dot = [self imageViewForSubview:  [self.subviews objectAtIndex: i]];
        if (i == self.currentPage) dot.image = activeImage;
        else dot.image = inactiveImage;
    }
}
 - (UIImageView *) imageViewForSubview: (UIView *) view
{
    UIImageView * dot = nil;
    if ([view isKindOfClass: [UIView class]])
    {
        for (UIView* subview in view.subviews)
        {
            if ([subview isKindOfClass:[UIImageView class]])
            {
                dot = (UIImageView *)subview;
                break;
            }
        }
        if (dot == nil)
        {
            dot = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, view.frame.size.width, view.frame.size.height)];
            [view addSubview:dot];
        }
    }
    else
    {
        dot = (UIImageView *) view;
    }

    return dot;
}

これでiOS7の問題も解決されることを願っています。誰かがそのための最適な解決策を見つけたら、コメントしてください. :)

ハッピーコーディング

于 2013-10-01T06:11:42.407 に答える