2009-08-13 59 views
1

我正在開發iPhone應用程序。我需要創建一個嵌入了不同問題視圖的測驗應用程序(請參閱我的similar question)。在Cocoa Touch中管理子視圖

不同類型的問題會有不同的行爲,所以我打算爲每種類型的問題創建一個控制器類。 MultipleChoiceQuestionController會設置一個問題和3-4個按鈕供用戶選擇一個答案。同樣,IdentifyPictureQuestionController會加載一個圖像並向用戶顯示一個文本框。

但是,docs表示UIViewController應該只用於佔用整個應用程序窗口的視圖。我還可以創建一個班級來管理我的子視圖中的事件?

感謝,

回答

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 
+0

讓委託類擴展UIViewController,bu蘋果公司的文件告訴我不要。那我該如何製作像viewDidLoad這樣的方法:fire? – tba 2009-08-14 18:32:28

+0

我不是在說這裏的App Delegate。我正在談論一個自定義的委託類,這是你的'UIViewController'不做的一部分工作。這樣可以根據所選視圖(問題類型)交換該代理人 – pgb 2009-08-14 18:58:54

+0

謝謝。所以我想使用loadNibNamed:@「MySubview」所有者:myCustomDelgate。子視圖加載時會通知myCustomDelegate嗎? – tba 2009-08-14 20:33:50

1

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

當你想MultipleChoiceQuestionController的視圖添加到您的主視圖中的子視圖,只需做到以下幾點:

[myMainView addSubview:instanceOfMultipleChoiceQuestionController.view]; 
+0

蘋果說不會:「注意:你不應該使用視圖控制器來管理意見只能填充其窗口,也就是說,只能由應用程序內容矩形定義的區域的一部分的一部分。如果你想有一個由幾個較小的視圖組成的界面,將它們全部嵌入到一個單獨的根視圖中,並使用視圖控制器來管理該視圖。 (http://developer.apple.com/iphone/library/documentation/ UIKit/Reference/UIViewController_Class/Reference/Reference.html#// apple_ref/doc/uid/TP40006926-CH3-DontLinkElementID_1) – tba 2009-08-14 06:13:14

1

我有同樣的問題,並根據蘋果的文檔,這裏是你應該做的:

注意:如果你想要一個 屏幕分爲多個區域和管理 每一個分別使用通用控制器對象(自NSObject降序的自定義對象 )而不是 視圖控制器對象來管理屏幕的每個 子部分。然後使用一個 單個視圖控制器對象到 管理通用控制器對象。 視圖控制器協調整個屏幕交互 ,但 根據需要將消息轉發到其管理的通用控制器對象。

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

0

這是一個非常不錯的小的解決方案,爲您提供所有的視圖控制器的優勢沒有打破蘋果的規則。

從頁面:

這是一個通用控制器類 可以用來處理一個分區。 它仿照U​​IViewController, 建模,但符合Apple的 建議。

您的視圖控制器創建 實例並負責管理子視圖控制器的 。 或者你可以進一步 細分你的視圖層次和 在 其他子視圖控制器內創建子視圖控制器。在 的情況下,實例化 對象的控制器負責管理子視圖控制器 。負責的控制器被稱爲「父控制器 」。當子視圖例如 需要顯示模式對話框時,子視圖可以使用視圖控制器 。

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

相關問題