Domanda

Sto estendendo la classe UIButton per poter impostare il carattere e il colore di UINavigationBarButton (da questo esempio di codice: attiva il codice )

Vado così:

@interface NavBarButtonGrey : UIButton 
-(id)init;

@end


@implementation NavBarButtonGrey

-(id)init {
if(self = [super init]) {
    self.frame = CGRectMake(0, 0, 49.0, 30.0);
    self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

    UIImage *image = [UIImage imageNamed:@"greyNavButton.png"];
    UIImage *stretchImage = 
    [image stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];
    [self setBackgroundImage:stretchImage forState:UIControlStateNormal];
    self.backgroundColor = [UIColor clearColor];
    [self setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
    self.titleShadowOffset = CGSizeMake(0, -1);
    self.titleLabel.font = [UIFont boldSystemFontOfSize:13];
}

return self;
}
@end

Questo è ok, ma ovviamente non molto flessibile. Come posso incorporare usando un typedef enum (come fa Apple) per tutti i diversi colori, caratteri e dimensioni a cui vorrei che il mio pulsante personalizzato fosse conforme.

L'unica cosa che posso ottenere dai file di interfaccia di UIKit è che è fatto in questo modo:

typedef enum {
RGCustomNavBarButtonStyleBlue,
RGCustomNavBarButtonStyleGrey,
RGCustomNavBarButtonStyleBlack,
RGCustomNavBarButtonStyleGreen,
RGCustomNavBarButtonStyleRed, 
} RGCustomNavBarButtonStyle;

Come ottenere da questo e in un'implementazione funzionante che prende carattere, dimensione, colore ecc. dai valori dell'enum attraverso il costruttore (initWithStyle)?

Si sovraccarica i costruttori nell'obiettivo C? costruttori multipli?

Spero abbia senso e grazie per l'aiuto dato :)

È stato utile?

Soluzione

Puoi avere più costruttori come;

-(MyClass) initWithFont: (UIFont) font;
-(MyClass) initWithFonmt: (UIFont) font andColor: (UIColor) color;

ecc.

Quindi chiama [super init] come prima riga in ciascuno dei tuoi costruttori personalizzati.

Altri suggerimenti

Per espandere ciò che ennuikiller ha detto sopra, mi è stato insegnato (il libro di Hillegass) a scegliere un inizializzatore — di solito quello con il maggior numero di opzioni, come il tuo initWithFont: eColor: —e chiedi agli altri inizializzatori di chiamarlo. L'inizializzatore principale viene definito inizializzatore designato.

Quindi il tuo codice avrebbe un initWithFont completamente implementato: andColor: che chiama [super init], e quindi avresti anche un initWithFont: che assomiglia a questo:

-(MyClass) initWithFont: (UIFont) font
{
    [self initWithFont:font andColor:RGCustomNavBarButtonStyleBlack];
}

Quindi initWithFont: andColor: gestirà tutte le altre impostazioni e chiamerà [super init].

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top