首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >indicator控制指示器(点)问题

indicator控制指示器(点)问题
EN

Stack Overflow用户
提问于 2011-01-10 16:54:47
回答 2查看 3.3K关注 0票数 2

大家好..。

我想要更改正在执行以下步骤的uipagecontroller指示器(点) color...For。

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

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

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

代码语言:javascript
复制
- (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...Here的视图,我正在做的是从nib中选择uipagecontroller,选择identity inspector,然后选择类名pagecontrol (新创建的类,有两个方法),它可以在滑动图像时改变颜色,但不能用于单击pagecontrol移动到下一页……

我不知道我应该包括什么或什么错误我是doing...please帮助我做这件事…

谢谢..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-10 17:02:26

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

我已经在我的一个项目中实现了相同的功能,所以它肯定会起作用。

代码语言:javascript
复制
- (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.

}

干杯

票数 2
EN

Stack Overflow用户

发布于 2013-10-05 22:07:39

你上面的代码在iOS 7中崩溃了。我已经找到了解决这个问题的办法。我知道这不是解决问题的方法,但在iOS 8投放市场之前,它肯定是有效的。

崩溃原因:

在iOS 7中,[self.subViews objectAtIndex: i]返回UIView而不是UIImageView,并且setImage不是UIView的属性,应用程序崩溃。我使用下面的代码来解决我的问题。

检查该子视图是UIView(对于iOS7)还是UIImageView(对于iOS6或更早版本)。如果它是UIView,我将在该视图上添加UIImageView作为子视图,瞧,它正在工作,并且不会崩溃。!!

代码语言:javascript
复制
-(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找到了最优的解决方案,请评论。:)

快乐编码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4645031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档