Я разрабатываю простое приложение Quiz. Приложение должно отображать различные типы QuizQuestions. Каждый тип QuizQuestion имеет четкое поведение и пользовательский интерфейс.iPhone subview design (UIView vs UIViewController)
Пользовательский интерфейс будет выглядеть примерно так: alt text http://dl.getdropbox.com/u/907284/Picture%201.png
Я хотел бы быть в состоянии проектировать каждый тип QuizQuestion в Interface Builder.
Например, MultipleChoiceQuizQuestion будет выглядеть следующим образом: alt text http://dl.getdropbox.com/u/907284/Picture%202.png
Первоначально я планировал сделать QuizQuestion класс UIViewController. Тем не менее, я прочитал в документации Apple, что UIViewControllers следует использовать только для отображения всей страницы.
Поэтому я сделал свой QuizController (который управляет всем экраном, например, предыдущими/предыдущими), UIViewController и мой класс QuizQuestion - подкласс UIView.
Однако, чтобы загрузить этот UIView (создан в IB), я должен [1] сделать следующее в моем конструкторе:
//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
}
Этот тип доступа, кажется, не быть стандартным или объектно-ориентированным. Является ли этот тип кода нормальным/приемлемым? Или я сделал плохой выбор где-то в моем дизайне?
Thankyou,
редактировать (для ясности): Я хотел бы иметь отдельный класс для управления multipleChoiceView ... как ViewController но, видимо, это только для целых окон. Может быть, я должен сделать MultipleChoiceViewManager (а не контроллер!) И установить вместо этого владельца файла?
Спасибо, но я хотел бы иметь отдельный класс для управления multipleChoiceView ... как ViewController, но, видимо, это только для целых окон. Может быть, я должен сделать MultipleChoiceViewManager (а не контроллер!) И вместо этого установить для этого владельца файла? – tba
Я думаю, что вы делаете это сложнее, когда вы так делаете. Делегирование - это то, что вы должны использовать независимо от того, что ваше решение касается того, где вы хотите, чтобы ваш код - в своем классе или в классе контроллера вида, где он будет использоваться. Это, очевидно, зависит от вас, но я не думаю, что вы что-то набираете, разместив его в своем классе. С наилучшими пожеланиями. –