UIPageControl точка для страницы поиска - PullRequest
5 голосов
/ 19 ноября 2009

Есть ли способ добавить значок увеличительного стекла вместо точки для моей первой страницы, который позволяет выполнять поиск, используя UIPageControl для моего собственного приложения на iPhone?

Я пытался зайти в Google, но не нашел похожих вопросов, но это похоже на широко распространенную функцию в приложениях Apple.

Кто-нибудь может мне помочь советом?

Ответы [ 2 ]

6 голосов
/ 22 ноября 2009

В основном UIPageControl имеет массив _indicators, который содержит UIViews для каждой из точек. Этот массив является частной собственностью, поэтому не стоит связываться с ним. Если вам нужны пользовательские значки, вам нужно будет выполнить собственную реализацию индикатора страницы.

Редактировать: После некоторых дополнительных исследований кажется, что вы можете заменить подпредставления UIPageControl для настройки точечных изображений. Проверьте http://www.onidev.com/2009/12/02/customisable-uipagecontrol/ для деталей. Все еще не уверен, что рецензенты Apple будут относиться к такому поступку.

1 голос
/ 31 декабря 2013

Я создал подкласс UIPageControl для легкого и легального достижения этого (без частных API). По сути, я перезаписал setNumberOfPages: вставить UIImageView с иконкой внутри последнего круга. Затем в методе setCurrentPage: я обнаруживаю, подсвечивается ли последняя страница или нет, чтобы изменить состояние UIImageView, а также очистить цвет фона круга, поскольку он будет автоматически обновляться частными API UIPageControl.

Это результат: 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;
    }
}
...