簡體   English   中英

在Cocoa Touch中管理子視圖

[英]Managing subviews in Cocoa Touch

我正在開發iPhone應用程序。 我需要創建一個其中嵌入了不同“問題”視圖的Quiz應用程序(請參閱類似的問題 )。

不同類型的Question將具有不同的行為,因此我計划為每種類型的Question創建一個控制器類。 MultipleChoiceQuestionController將設置一個問題和3-4個按鈕供用戶選擇答案。 類似地,IdentifyPictureQuestionController將加載圖像並向用戶顯示一個文本框。

但是, 文檔說UIViewController僅應用於占據整個應用程序窗口的視圖。 我還能如何創建一個類來管理子視圖中的事件?

謝謝,

子類化UIViewController將提供此功能。 例如,MultipleChoiceQuestionController將是UIViewController的子類。 MultipleChoiceQuestionController將包含問題文本(UILabel或UITextView)和幾個按鈕(UIButton)。 您可以在MultipleChoiceQuestionController中創建一個自定義構造函數,該構造函數將用相關的問題字符串和其他相關信息填充視圖。

當您要將MultipleChoiceQuestionController的視圖添加到主視圖的子視圖時,只需執行以下操作:

[myMainView addSubview:instanceOfMultipleChoiceQuestionController.view];

您可以在視圖本身上處理事件,或者您的視圖控制器可以具有針對不同類型的問題而更改的委托類。 該代表將處理不同的輸入,並對用戶的觸摸以不同的方式做出反應。

這里有一些想法的代碼。

// 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

我遇到了同樣的問題,根據Apple的文檔,這是您應該執行的操作:

注意:如果要將單個屏幕划分為多個區域並分別管理每個區域,請使用通用控制器對象(來自NSObject的自定義對象)而不是視圖控制器對象來管理屏幕的每個子部分。 然后,使用單個視圖控制器對象來管理通用控制器對象。 視圖控制器協調整個屏幕交互,但根據需要將消息轉發到它管理的通用控制器對象。

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

這是一個非常好的小解決方案,為您提供了視圖控制器的所有優點,而又不會違反蘋果規則。

從頁面:

這是一個通用控制器類,可用於處理子區域。 它是根據UIViewController建模的,但符合Apple的建議。

您的視圖控制器將創建實例,並負責管理子視圖控制器。 或者,您可以進一步細分視圖層次結構,並在其他子視圖控制器中創建子視圖控制器。 在這兩種情況下,實例化對象的控制器都負責管理子視圖控制器。 負責人的控制器稱為“父控制器”。 子類例如在需要顯示模式對話框時可以使用視圖控制器。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM