Ich entwerfe eine einfache Quiz-Anwendung. Die Anwendung muss verschiedene Arten von QuizQuestions anzeigen. Jede Art von QuizQuestion hat ein unterschiedliches Verhalten und eine eigene Benutzeroberfläche.iPhone Subview Design (UIView vs UIViewController)
Die Benutzeroberfläche wird in etwa so sein: alt text http://dl.getdropbox.com/u/907284/Picture%201.png
Ich mag wäre in der Lage sein, jede Art von QuizQuestion im Interface Builder zu entwerfen.
Zum Beispiel kann ein MultipleChoiceQuizQuestion würde wie folgt aussehen: alt text http://dl.getdropbox.com/u/907284/Picture%202.png
Ursprünglich habe ich die QuizQuestion Klasse ein UIViewController machen geplant. Ich habe jedoch in der Apple-Dokumentation gelesen, dass UIViewControllers nur zum Anzeigen einer ganzen Seite verwendet werden sollte.
Daher habe ich meine QuizController (die den gesamten Bildschirm, z. B. Prev/Next-Schaltflächen verwaltet) eine UIViewController und meine QuizQuestion-Klasse eine Unterklasse von UIView.
jedoch diese UIView zu laden (in IB erstellt), muss ich [1] gehen Sie wie folgt in meinem Konstruktor:
//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
}
Diese Art des Zugriffs scheint nicht Standard zu sein oder objektorientiert. Ist diese Art von Code normal/akzeptabel? Oder habe ich irgendwo in meinem Design eine schlechte Wahl getroffen?
Thankyou,
bearbeiten (für Klarheit): würde Ich mag eine eigene Klasse haben die multipleChoiceView zu steuern ... wie ein Viewcontroller aber anscheinend das ist nur für ganze Fenster. Vielleicht sollte ich einen MultipleChoiceViewManager machen (nicht Controller!) Und stattdessen den Besitzer der Datei festlegen?
Danke, aber ich würde gerne eine separate Klasse haben, um die multipleChoiceView zu steuern ... wie ein ViewController, aber anscheinend ist das nur für ganze Fenster. Vielleicht sollte ich einen MultipleChoiceViewManager machen (nicht Controller!) Und stattdessen den File Owner auf diesen setzen? – tba
Ich denke, du machst es dir schwerer, es so zu machen. Die Delegierung ist das, was Sie verwenden müssen, auch wenn Sie entscheiden, wo Sie Ihren Code haben möchten - in seiner eigenen Klasse oder in der View-Controller-Klasse, in der er verwendet wird. Es liegt natürlich an dir, aber ich glaube nicht, dass du etwas gewinnst, indem du es in eine eigene Klasse legst. Freundliche Grüße. –