UIPageControl点为搜索页面

时间:2009-11-19 09:08:30

标签: iphone objective-c uikit uipagecontrol

有没有办法为我的第一页添加放大镜图标而不是点,这允许在iPhone上使用UIPageControl为我的本机应用程序执行一些搜索?

我曾试图谷歌,但根本没有找到类似的问题,但它看起来像Apple应用程序中的广泛功能。

有人可以帮我提一些建议吗?

2 个答案:

答案 0 :(得分:6)

基本上UIPageControl有一个_indicators数组,其中包含每个点的UIViews。这个数组是私有属性,所以你不应该搞乱它。如果您需要自定义图标,则必须执行自己的页面指示器实现。

编辑:经过一些研究后,似乎可以替换UIPageControl子视图来自定义点图像。有关详细信息,请查看http://www.onidev.com/2009/12/02/customisable-uipagecontrol/。仍然不确定Apple评论员会如何做这样的事情。

答案 1 :(得分:1)

我创建了一个UIPageControl子类来轻松合法地实现这一目标(没有私有API)。 基本上,我覆盖了setNumberOfPages:在最后一个圆圈内插入带有图标的UIImageView。然后在setCurrentPage:方法中检测最后一页是否突出显示,修改UIImageView的状态,并清除圆圈的背景颜色,因为这将由UIPageControl私有API自动更新。

这是结果: enter image description here

这是代码:

@interface EPCPageControl : UIPageControl
@property (nonatomic) UIImage *lastPageImage;
@end

@implementation EPCPageControl

- (void)setNumberOfPages:(NSInteger)pages
{
    [super setNumberOfPages:pages];

    if (pages > 0) {

        UIView *indicator = [self.subviews lastObject];
        indicator.backgroundColor = [UIColor clearColor];

        if (indicator.subviews.count == 0) {

            UIImageView *icon = [[UIImageView alloc] initWithImage:self.lastPageImage];
            icon.alpha = 0.5;
            icon.tag = 99;

            [indicator addSubview:icon];
        }
    }
}

- (void)setCurrentPage:(NSInteger)page
{
    [super setCurrentPage:page];

    if (self.numberOfPages > 1 && self.lastPageImage) {

        UIView *indicator = [self.subviews lastObject];
        indicator.backgroundColor = [UIColor clearColor];

        UIImageView *icon = (UIImageView *)[indicator viewWithTag:99];
        icon.alpha = (page > 1 && page == self.numberOfPages-1) ? 1.0 : 0.5;
    }
}