Sto progettando un'applicazione Quiz semplice. L'applicazione deve visualizzare diversi tipi di QuizQuestions. Ogni tipo di QuizQuestion ha un comportamento e un'interfaccia utente distinti.Design subview iPhone (UIView vs UIViewController)
L'interfaccia utente sarà qualcosa di simile: alt text http://dl.getdropbox.com/u/907284/Picture%201.png
Mi piacerebbe essere in grado di progettare ogni tipo di QuizQuestion in Interface Builder.
Ad esempio, un MultipleChoiceQuizQuestion sarebbe simile a questa: alt text http://dl.getdropbox.com/u/907284/Picture%202.png
In origine, ho pensato di rendere la classe QuizQuestion un UIViewController. Tuttavia, ho letto nella documentazione di Apple che UIViewControllers dovrebbe essere utilizzato solo per visualizzare un'intera pagina.
Pertanto, ho creato il mio QuizController (che gestisce l'intero schermo, ad esempio i pulsanti prev/next) un UIViewController e la mia classe QuizQuestion una sottoclasse di UIView.
Tuttavia, per caricare questo UIView (creato nel IB), devo [1] effettuare le seguenti operazioni nel mio costruttore:
//MultipleQuizQuestion.m
+(id)createInstance {
UIViewController *useless = [[UIViewController alloc] initWithNibName:@"MultipleQuizQuestion" bundle:nil];
UIView *view = [[useless.view retain] autorelease];
[useless release];
return view; // probably has a memory leak or something
}
Questo tipo di accesso non sembra essere standard o object-oriented. Questo tipo di codice è normale/accettabile? O ho fatto una scelta sbagliata da qualche parte nel mio progetto?
Grazie,
di modifica (per chiarezza): Mi piacerebbe avere una classe separata per controllare il multipleChoiceView ... come un ViewController ma a quanto pare questo è solo per intere finestre. Forse dovrei creare MultipleChoiceViewManager (non controller!) E impostare il proprietario del file su quello?
Grazie, ma mi piacerebbe avere una classe separata per controllare il multipleChoiceView ... come un ViewController ma apparentemente è solo per l'intera finestra. Forse dovrei creare MultipleChoiceViewManager (non controller!) E impostare il proprietario del file su quello? – tba
Penso che tu stia rendendo più difficile per te farlo in quel modo. La delega è ciò che devi usare indipendentemente dal fatto che la tua decisione riguardi il punto in cui desideri inserire il codice, nella sua classe o nella classe del controller di visualizzazione in cui verrà utilizzato. Dipende ovviamente da te, ma non penso che stai guadagnando nulla mettendolo nella sua stessa classe. I migliori saluti. –