搜索页面的UIPageControl点

5
有没有办法在我的第一页中使用UIPageControl添加一个放大镜图标来执行一些搜索,而不是使用点作为标记?我在iPhone上的本机应用程序中尝试了谷歌搜索,但没有找到类似的问题,但它看起来像是苹果应用程序中广泛使用的功能。有人能给我提供建议帮助吗?
2个回答

6
基本上,UIPageControl有一个名为_indicators的数组,其中包含每个点的UIView。这个数组是一个私有属性,所以你不应该去修改它。如果你需要自定义图标,你将需要自己实现页面指示器。
编辑:经过更多的研究,似乎你可以替换UIPageControl的子视图来自定义点的图像。查看http://www.onidev.com/2009/12/02/customisable-uipagecontrol/获取详细信息。但仍然不确定苹果审核者对这样做的感受如何。

谢谢你的回答!我希望到最后它不会是这样的 :-/ - Denis
通过向UIPageControl添加子视图,在搜索图标上方(不得不花费一些时间找出其放置算法),我已经实现了我的目标。它的工作方式正是所需的。无论如何,我必须对苹果方面不允许这种自定义功能的做法发表一些不满。 - Denis
1
我们使用您提供的链接描述的技术提交应用程序,并没有遇到任何问题。 - hennes
那个链接已经失效了,你可以在archive.org上找到它的旧内容:https://web.archive.org/web/20120408220415/http://www.onidev.com/2009/12/02/customisable-uipagecontrol/ - Bill

1
我创建了一个UIPageControl子类,以便轻松且合法地实现此功能(无需使用私有API)。 基本上,我重写了setNumberOfPages:在最后一个圆圈内插入带图标的UIImageView。然后,在setCurrentPage:方法中,如果高亮显示了最后一页,则检测它,以修改UIImageView的状态,并清除圆圈的背景颜色,因为这将由UIPageControl私有API自动更新。
这是结果: “enter 这是代码:
@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;
    }
}

谢谢。这对我帮助很大。我发现这种方法比其他方法更简洁! - kekub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接