【问题标题】:UIPageControl dot for a search page搜索页面的 UIPageControl 点
【发布时间】:2009-11-19 09:08:30
【问题描述】:

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

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

谁能帮我提个建议?

【问题讨论】:

    标签: iphone objective-c uikit uipagecontrol


    【解决方案1】:

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

    编辑:经过更多研究,您似乎可以替换 UIPageControl 子视图来自定义点图像。详情请查看http://www.onidev.com/2009/12/02/customisable-uipagecontrol/。不过,仍然不确定 Apple 评论者对做这种事情会有什么感受。

    【讨论】:

    • 感谢您的回答!我希望它不会是这样的:-/
    • 我已经通过在搜索图标上方的 UIPageControl 添加一个子视图来实现我的目标(不得不花一些时间来找出它的放置算法)。它按需要工作。不管怎样,我不得不向苹果方面表示一点小小的责备,因为它不允许这种开箱即用的定制。
    • 我们已经使用您提供的链接中描述的技术提交了应用程序,没有任何问题。
    • 该链接已失效。您可以在 archive.org 上找到它的旧内容:web.archive.org/web/20120408220415/http://www.onidev.com/2009/…
    【解决方案2】:

    我创建了一个 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;
        }
    }
    

    【讨论】:

    • 谢谢。这对我帮助很大。我发现它比其他方法更干净!
    猜你喜欢
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多