tba*_*tba 7 iphone cocoa-touch objective-c uiviewcontroller uiview
我正在设计一个简单的测验应用程序.应用程序需要显示不同类型的QuizQuestions.每种类型的QuizQuestion都有不同的行为和UI.
用户界面将是这样的: alt text http://dl.getdropbox.com/u/907284/Picture%201.png
我希望能够在Interface Builder中设计每种类型的QuizQuestion.
例如,MultipleChoiceQuizQuestion将如下所示: alt text http://dl.getdropbox.com/u/907284/Picture%202.png
最初,我计划将QuizQuestion类设为UIViewController.但是,我在Apple文档中读到UIViewControllers应该只用于显示整个页面.
因此,我制作了我的QuizController(管理整个屏幕,例如prev/next按钮)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
}
Run Code Online (Sandbox Code Playgroud)
这种类型的访问似乎不是标准的或面向对象的.这种类型的代码是正常/可接受的吗?或者我在设计的某个地方做出了糟糕的选择?
谢谢,
编辑(为了清楚起见):我想有一个单独的类来控制multipleChoiceView ...就像一个ViewController,但显然只适用于整个窗口.也许我应该创建一个MultipleChoiceViewManager(而不是控制器!)并将文件的所有者设置为它?
你走在正确的轨道上.在QuizController xib中,您可以通过将它们拖动到xib的主窗口而不是QuizController的主视图来创建单独的视图.然后,您可以根据问题类型设计所需的每个视图.当用户点击下一个或上一个时,删除上一个视图并使用视图控制器主视图上的-addSubview根据您的问题类型加载所需的视图,并跟踪当前显示的子视图.尝试这样的事情:
[currentView removeFromSuperView];
switch(questionType)
{
case kMultipleChoice:
[[self view] addSubview:multipleChoiceView];
currentView = multipleChoiceView;
break;
case kOpenEnded:
[[self view] addSubview:openEndedView];
currentView = openEndedView;
break;
// etc.
}
Run Code Online (Sandbox Code Playgroud)
其中multipleChoice视图和openEndedView是QuizController中的UIView出口,连接到您在IB中设计的视图.在添加视图之前,您可能需要在父视图中混淆视图的位置以使其显示在正确的位置,但是您可以通过调用UIView上的-setBounds/-setFrame和/或-setCenter来执行此操作.
| 归档时间: |
|
| 查看次数: |
12899 次 |
| 最近记录: |