Sto sviluppando un'applicazione iOS, in cui devo disegnare alcuni pattern su una vista in base all'opzione selezionata dall'utente. Lascia che ti spieghi più chiaramente.
L'utente mostrerà il numero di immagini come opzioni tra cui scegliere.
Selezionando un'opzione, verrà disegnata una vista. Questa vista eredita da una classe che dice ParentClass
dove ho impostato le proprietà comuni per le classi figlie.
ParentClass
@interface ParentClass : UIView
-(ImagePlaceHolder *) imageHolderTouched:(CGPoint) position;
//common properties declared
@end
In questo momento, il mio approccio è l'uso di classi separate per ogni modello. Sovrascrivo drawRect:
per motivi diversi. Ecco perché sto creando classi figlio separate per ciascuna.
ChildDesign
@interface ChildDesign : ParentClass
@end
@implementation CollageDesign
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self drawViews];
}
return self;
}
-(void) drawRect:(CGRect)rect
{
//different implementation for different classes
}
@end
Esistono molte classi figlio simili che hanno un'implementazione drawRect
diversa. Nel controller principale, inizializzo la classe child pattern in base alla selezione utilizzando switch case.
ParentClass collView;
switch (selectedOptionIndex) {
case 1:
collView = [[ChildDesign alloc] initWithFrame:newframe];
break;
case 2:
collView = [[ChildDesign2 alloc] initWithFrame:newframe]; //similar other classes
break;
case 3:
collView = [[ChildDesign3 alloc] initWithFrame:newframe];
break;
}
Il problema è che ho un sacco di opzioni, diciamo 50 - 100. La creazione di classi ereditate separate (50 - 100 .h e .m file) sarebbe un approccio davvero negativo secondo me ed è una cattiva pratica di programmazione.
Quindi quale modello dovrei seguire qui per ottimizzare il mio codice? Come dovrei creare le mie classi / modelli figlio? Quale sarà l'approccio migliore? Un'idea nella mia mente è quella di passare l'indice selezionato a spero che la mia domanda sia chiara .. Grazie.
Un'idea nella mia mente è creare una classe di pattern figlio singolo che abbia selezionato l'indice come proprietà. In base all'indice selezionato, implementerò il metodo drawRect:
. Ma ci saranno molti casi if-else o switch.