2010-05-24 14 views
0

我正在學習如何開發自己的iPhone應用程序,但我很難理解某些概念。視圖控制器必須在iPhone應用程序中始終有一個委託?

首先,我是否可以說每個視圖都必須有一個視圖控制器?對於每個視圖控制器,都必須有一個委託人嗎?

另外,mainWindow.nib有什麼作用?我讀過的大部分教程似乎都沒有觸及那個筆尖。總是會發生的是將NavigationController設置爲根控制器,將另一個ViewController推入堆棧,並且此ViewController將有另一個與之關聯的nib。

所以我可以假設我可以安全地忽略主窗口筆尖?

回答

2

這都是關於MVC (Model View Controller),innit?

模型,這取決於你 - 你的應用程序做什麼?將其視爲後端,即應用程序的引擎,不受字體大小決定和觸摸事件的影響。

該視圖,蘋果幾乎爲你寫了。你使用他們的Textfields和表格和imageViews。您可以使用Interface Builder將它們組裝到您的GUI中(打包爲.nib)。你很少,如果需要繼承標準視圖元素(在你想要一個自定義視圖繪製的遊戲中,因爲你所有的繪圖可能都是自定義的)。如果這可以幫助您管理它們,則可以將GUI的不同部分分解爲不同的.nib文件。這完全取決於你。

控制器,所以你可能有一些工作要讓你的GUI代表你的模型。你需要一些控制器。多少?但是很多都可以由你來管理。如果你有一個包含2個子視圖的視圖,它們每個都需要一個視圖控制器?不,可能不是。您的代碼將視圖連接到模型有多複雜?

某些GUI模式非常常見,Apple甚至爲您編寫了Controller代碼。 EG用於UINavigationBar的控制器,UINavigationController。因此,如果您的應用具有需要導航的分層視圖,並且需要顯示導航欄,則可以使用UINavigationController的實例,而不是編寫自己的類。好極了!

當然,UINavigationController代碼(或任何其他viewController)不能神奇地知道如何與我們的模型進行整合,以我們的視角,可以嗎?不,它不能。一般來說,在Cocoa中,如果有一些類別的物品主要在貨架上工作,但也有具有可選的可配置行爲 - 使我們可以根據我們的需要定製它 - 它由委託代理完成。即子類化UINavigationController的Instead,我們告訴它的具體實例在哪裏可以找到(因爲需要更好的詞)它是自定義行爲。

爲什麼?假設你有一個navigationController,一個tableView和一個文本框。 UINavigationController主要處理您的導航需求,但每次用戶移動到新視圖時都必須有瘋狂的QUACK聲音播放。 UITableView主要完全是你需要從表中獲得的所有東西,除非你真的希望頭版表中的第三行是其他行的高度的兩倍。標準的現成UITextField幾乎可以滿足您的文本框需求,除非您需要的文本框只有在用戶朝北時纔可編輯。處理這種情況的一種方法是創建3個新類,一個自定義UINavigationController,一個自定義tableView和一個自定義文本字段,並使用它們。通過授權,我們可以按照原樣使用這些類,並將一個對象作爲所有3個實例的代表 - 更加清晰。

代表團大多是可選的,文檔將告訴您何時何地,這取決於您,以及您是否需要該定製行爲。

相關問題