有没有办法为我的第一页添加放大镜图标而不是点,这允许在iPhone上使用UIPageControl为我的本机应用程序执行一些搜索?
我曾试图谷歌,但根本没有找到类似的问题,但它看起来像Apple应用程序中的广泛功能。
有人可以帮我提一些建议吗?
答案 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自动更新。
这是结果:
这是代码:
@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;
}
}