在Cocoa Touch中管理子视图

时间:2009-08-13 21:21:18

标签: iphone objective-c cocoa-touch uiview uiviewcontroller

我正在开发一款iPhone应用程序。我需要创建一个Quiz应用程序,其中嵌入了不同的问题视图(请参阅我的similar question)。

不同类型的问题将有不同的行为,因此我计划为每种类型的问题创建一个控制器类。 MultipleChoiceQuestionController将设置一个问题和3-4个按钮供用户选择答案。同样,IdentifyPictureQuestionController会加载图像并向用户显示一个文本框。

然而, docs表示UIViewController只应用于占用整个应用程序窗口的视图。我还可以创建一个类来管理子视图中的事件吗?

谢谢,

4 个答案:

答案 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降序而不是   查看控制器对象来管理每个   屏幕的子部分。然后用一个   单视图控制器对象   管理通用控制器对象。   视图控制器协调   整体屏幕互动但是   根据需要转发消息   它管理的通用控制器对象。

http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/AboutViewControllers/AboutViewControllers.html#//apple_ref/doc/uid/TP40007457-CH112-SW12

答案 3 :(得分:0)

这是一个非常好的小解决方案,在不破坏苹果规则的情况下为您提供视图控制器的所有优势。

从页面:

  

这是一个通用的控制器类   可用于处理子区域。   它以UIViewController为模型,   但符合Apple的要求   建议。

     

您的视图控制器会创建   实例并负责   管理子视图控制器。   或者你可以进一步   细分你的观点层次和   在里面创建子视图控制器   其他子视图控制器。同时   控制器实例化的情况   对象负责管理   子视图控制器。负责任的   控制器被称为'父母   控制器“。子类可以使用   例如,当他们查看控制器时   需要显示模态对话框。

https://github.com/Koolistov/Subview-Controller