2012-11-19 62 views
1

我正在學習Cocoa,並按照'通用'教程獲取帶有按鈕和標籤的基本表單。可可 - 視圖處理的解釋

隨着.xib,我已經添加了一個「對象」(NSObject子類的實例),並且還創建了一個ViewController類,我通過設置​​到視圖控制器連接到我的觀點。然後我編碼我的ViewController.h.m文件,添加一個pressedButton方法和一個標籤(myLabel)。這一切工作正常(即按下按鈕時標籤更新)。

我的問題是:我實際上用C++術語(我更熟悉的一種語言)來處理這個過程?據我瞭解,我的'對象'(設置爲類ViewController)表示.xib文件的一個實例(這裏可能是錯誤的),並且通過將此設置爲ViewController類,我可以在ViewController中創建出口和動作.h/.m,但我仍然不確定幕後發生了什麼。

最後,XCode模板提供了一個AppDelegate類'免費'。鑑於我通過我的ViewController類來管理我的控件,該文件/對象將用於什麼 - 它是針對應用程序而言與視圖本身無關的事情,還是用於管理表單上的控件(就像你在一些教程中看到的那樣)?

回答

1

我希望我能很好地理解你的問題的第一部分。 .xib(nib文件的xml版本)不代表類或對象。它用來創建一個視圖對象及其所有子視圖(每個對象)並將其正確地鏈接到視圖控制器。

這是最常見和自動生成的方式,您的nib文件中的底層視圖corersponds self.view(從視圖控制器的角度來看)。 您可以通過瀏覽self.view的子視圖層次來訪問由nib文件創建的每個視圖。或者,您可以在nib/IB(界面構建器)中定義標籤以更輕鬆地訪問各個視圖對象。

「爲了您的方便」引入了IBOutlets。您可以在視圖控制器的界面中定義IBOutlet,並使用IB將其鏈接到使用xib文件創建的專用對象。 我在說「只是爲了您的方便」,因爲考慮到解決視圖對象的其他方式,它並不是真的必要。但它不僅方便,而且強烈建議並遵守標準的做法。

您甚至可以以編程方式將更多視圖添加到使用IB創建的表單/視圖。您可以通過編程方式更改這些視圖的屬性。

視圖和子視圖是在您使用initWithNibName:bundle:方法使用nib文件初始化視圖控制器時創建的。然後打開nib文件(xib),它的內容被解析和解釋,並且所有的視圖被創建並分別被添加到它們的超級視圖中,並且它們的屬性和動作:選擇器等被相應地設置。同樣,整個過程都是爲了您的方便而設計的。你甚至可以通過編程創建所有視圖 - 根本不需要任何nib文件。您自定義視圖控制器的loadView方法將是dong的適當位置。

第二個問題: AppDelegate是爲應用程序範圍內的操作等設計的。如果您可以在視圖控制器內管理一切正常,那麼您不需要在AppDelegate上更改任何內容。 它通常用作全局變量或函數的容器(這些屬性和應用程序委託對象的成員)。有時您可能會發現需要重寫某些AppDelegates方法,如application:didFinishLanuncing或applicationDidBecomeActive。 嚴格地說,UIApplicationDelegate不是你的子類。這是一個你實現的協議。 (非常像Java內的接口 - 有點可以克服你從C++中熟悉的多重繼承的缺點)。

+0

非常感謝Hermmann ......很好的解釋。我知道我必須停止使用Objective-C的C++思想,但它確實有助於查看相似之處。 – Pete855217