2009-11-19 8 views
6

Gibt es eine Möglichkeit, ein Vergrößerungsglas-Symbol anstelle des Punktes für meine erste Seite hinzuzufügen, die eine Suche mit dem UIPageControl für meine native Anwendung auf dem iPhone ermöglicht?UIPageControl-Punkt für eine Suchseite

Ich habe versucht, google, aber habe keine ähnlichen Fragen überhaupt, aber es sieht aus wie eine weit verbreitete Funktion in Apple-Anwendungen.

Kann mir jemand mit einem Ratschlag helfen?

Antwort

7

Grundsätzlich UIPageControl hat eine _indicators Array, die UIViews für jeden der Punkte enthält. Dieses Array ist eine private Eigenschaft, also sollten Sie sich nicht damit anlegen. Wenn Sie benutzerdefinierte Symbole benötigen, müssen Sie Ihre eigene Implementierung des Seitenindikators durchführen.

Bearbeiten: Nach einigen weiteren Untersuchungen scheint es, dass Sie die Subviews UIPageControl ersetzen können, um die Punktbilder anzupassen. Überprüfen Sie http://www.onidev.com/2009/12/02/customisable-uipagecontrol/ für Details. Immer noch nicht sicher, wie Apple-Rezensenten über so etwas denken werden.

+0

Vielen Dank für Ihre Antwort! Ich hoffte bis zum letzten wird es nicht auf diese Weise sein: -/ – Denis

+0

Ich habe mein Ziel erreicht, indem ich eine Unteransicht zu UIPageControl hinzufügte, über dem Suchsymbol (musste einige Zeit verbringen, um seinen Platzierungsalgorithmus herauszufinden) . Es funktioniert genau so, wie es gebraucht wird. Was auch immer, ich muss eine kleine Schuld auf die Seite von Apple schicken, um diese Anpassung nicht zuzulassen. – Denis

+1

Wir haben Apps unter Verwendung der in dem von Ihnen angegebenen Link beschriebenen Technik ohne Probleme eingereicht. – hennes

1

Ich habe eine UIPageControl-Unterklasse erstellt, um dies einfach und legal (ohne private APIs) zu erreichen. Grundsätzlich habe ich setNumberOfPages überschrieben: fügen Sie ein UIImageView mit dem Symbol innerhalb des letzten Kreises ein. Dann erkenne ich auf der setCurrentPage: Methode, ob die letzte Seite markiert ist oder nicht, um den Zustand der UIImageView zu ändern und auch die Hintergrundfarbe des Kreises zu löschen, da diese automatisch von UIPageControl privaten APIs aktualisiert wird. Diese

ist das Ergebnis: enter image description here

Dies ist der Code:

@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; 
    } 
} 
+0

Vielen Dank. Das hat mir sehr geholfen. Ich fand es viel sauberer als die andere Annäherung! – kekub

Verwandte Themen