我正在开发一款iPhone应用程序。我需要创建一个Quiz应用程序,其中嵌入了不同的问题视图(请参阅我的similar question)。
不同类型的问题将有不同的行为,因此我计划为每种类型的问题创建一个控制器类。 MultipleChoiceQuestionController将设置一个问题和3-4个按钮供用户选择答案。同样,IdentifyPictureQuestionController会加载图像并向用户显示一个文本框。
然而, docs表示UIViewController只应用于占用整个应用程序窗口的视图。我还可以创建一个类来管理子视图中的事件吗?
谢谢,
答案 0 :(得分:1)
子类化UIViewController将提供此功能。例如,MultipleChoiceQuestionController将是UIViewController的子类。 MultipleChoiceQuestionController将包含问题文本(UILabel或UITextView)和几个按钮(UIButton)。您可以在MultipleChoiceQuestionController中创建一个自定义构造函数,该构造函数将使用相关的问题字符串和其他相关信息填充视图。
如果要将MultipleChoiceQuestionController的视图添加到主视图的子视图中,只需执行以下操作:
[myMainView addSubview:instanceOfMultipleChoiceQuestionController.view];
答案 1 :(得分:1)
您可以在视图本身上处理事件,或者您的视图控制器可以具有针对不同类型的问题而更改的委托类。该代表将处理不同的输入,并以不同的方式对用户触摸作出反应。
这是一些有关这个想法的代码。
// In QuestionViewControllerDelegateProtocol.h
@protocol QuestionViewControllerDelegateProtocol
// Define the methods you want here
- (void)touchesBegan;
- (void)touchesEnded;
- (void)questionLoaded;
@end
// In QuestionViewController.h
@interface QuestionViewController {
id<QuestionViewControllerDelegateProtocol> delegate;
}
@end
// In QuestionViewController.m
@implementation QuestionViewController
- (void)viewDidLoad:(BOOL)animated {
[delegate questionLoaded];
}
- (void)touchesBegan {
// Some processing logic.
[delegate touchesBegan];
}
@end
答案 2 :(得分:1)
我有同样的问题,根据Apple的文档,这是你应该做的:
注意:如果要分割单个 屏幕分为多个区域并进行管理 每一个单独使用泛型 控制器对象(自定义对象 从NSObject降序而不是 查看控制器对象来管理每个 屏幕的子部分。然后用一个 单视图控制器对象 管理通用控制器对象。 视图控制器协调 整体屏幕互动但是 根据需要转发消息 它管理的通用控制器对象。
答案 3 :(得分:0)
这是一个非常好的小解决方案,在不破坏苹果规则的情况下为您提供视图控制器的所有优势。
从页面:
这是一个通用的控制器类 可用于处理子区域。 它以UIViewController为模型, 但符合Apple的要求 建议。
您的视图控制器会创建 实例并负责 管理子视图控制器。 或者你可以进一步 细分你的观点层次和 在里面创建子视图控制器 其他子视图控制器。同时 控制器实例化的情况 对象负责管理 子视图控制器。负责任的 控制器被称为'父母 控制器“。子类可以使用 例如,当他们查看控制器时 需要显示模态对话框。