Custom UIPageviewControl的子视图在ios7中返回UIView,在ios6中返回UIImageView

时间:2013-09-26 09:19:25

标签: iphone ios7 uipagecontrol

您好我正在使用customPageControl。它在iOS 6上工作正常,但iOS 7上的应用程序崩溃。详细的场景如下:

我在项目中使用了customPageControl文件。有关详细的CustomPageControl,您可以浏览此link。在iOS 6中,[self.subviews objectAtIndex: 1]会返回UIImageView,但在iOS 7中会返回UIView。我正在使用

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

在iOS 7中,它将imageView视为UIView,并提供未经识别的Selector发送的异常。

请给我一些指示。

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。我知道这不是方法,但确定它可以运行,直到iOS 8将在市场上推出。

崩溃原因:

iOS 7中的

[self.subViews objectAtIndex: i]返回UIView而不是UIImageViewsetImage不是UIView的属性,应用程序崩溃了。我使用以下代码解决了我的问题。

检查子视图是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解决你的问题。如果Anypone找到最佳解决方案,请发表评论。 :)

快乐编码