uipagecontrol指标(点)问题

时间:2011-01-10 08:54:47

标签: iphone uipagecontrol

Hai All ......

我想更改uipagecontroller指示符(点)颜色...为此我正在执行以下步骤。

使用2个方法创建名为PageControl的新类

1.- (void) setCurrentPage:(NSInteger)page

2.- (void) setNumberOfPages:(NSInteger)pages

- (void) setCurrentPage:(NSInteger)page 
{
    NSLog(@"setCurrentPage");
    [super setCurrentPage:page];
    NSString* imgActive = [[NSBundle mainBundle] pathForResource:@"activeimage" ofType:@"png"];
    NSString* imgInactive = [[NSBundle mainBundle] pathForResource:@"inactive" ofType:@"png"];
    for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++)
    {
        UIImageView* subview= [self.subviews objectAtIndex:subviewIndex];

        if (subviewIndex == page) 
            [subview setImage:[UIImage imageWithContentsOfFile:imgActive]];          
        else
            [subview setImage:[UIImage imageWithContentsOfFile:imgInactive]];           

        subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, 10,10);
    }
}


- (void) setNumberOfPages:(NSInteger)pages 
{
    NSLog(@"setNumberOfPages");
    [super setNumberOfPages:pages];
    NSString* img = [[NSBundle mainBundle] pathForResource:@"inactive" ofType:@"png"];
    for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++)
    {
        UIImageView* subview= [self.subviews objectAtIndex:subviewIndex];            
        [subview setImage:[UIImage imageWithContentsOfFile:img]];        
        subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, 10,10);
    }
}

我已经有了一个带有pagecontrol和scrollview的视图......这里我正在做的是从nib中选择uipagecontroller并选择身份检查器并选择类名称PageControl(新创建的类,包含2个方法)在滑动图像的同时更改颜色但是,它不适用于单击页面控件以移动到下一页...

我不知道我想要包括什么,或者我正在做什么错......请帮助我这样做......

谢谢......

2 个答案:

答案 0 :(得分:2)

如果要在点击点时启用页面滚动,则首先需要将xib文件中的“value changed”属性与您在代码中设置的操作相关联。

我在我的一个项目中实现了相同的功能,所以它肯定会有效。

- (IBAction)changePage:(id)sender {
int page = pageControl.currentPage;
CGFloat pageWidth = scrollView.frame.size.width;

pageWidth = scrollView.frame.size.width;
pageControl.currentPage = page;

CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];

// Set the boolean used when scrolls originate from the UIPageControl. See scrollViewDidScroll: above.

}

干杯

答案 1 :(得分:0)

您的上述代码在iOS 7中崩溃了。我找到了解决此问题的方法。我知道这不是方法,但确定它可以运行,直到iOS 8将在市场上推出。

崩溃原因:

iOS 7中的

[self.subViews objectAtIndex: i]返回UIView而不是UIImageView而setImage不是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找到最佳解决方案,请发表评论。 :)

快乐编码